DATEPART (Transact-SQL)
返回表示指定 date 的指定 datepart 的整数。
有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据。
语法
DATEPART ( datepart , date )
参数
datepart
是将为其返回 integer 的 date(日期或时间值)的一部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。datepart
缩写
year
yy,yyyy
quarter
qq,q
month
mm, m
dayofyear
dy,y
day
dd,d
week
wk,ww
weekday
dw
hour
hh
minute
mi, n
second
ss, s
millisecond
ms
microsecond
mcs
nanosecond
ns
TZoffset
tz
ISO_WEEK
isowk,isoww
date
是一个表达式,可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值。date 可以是表达式、列表达式、用户定义的变量或字符串文字。为避免不确定性,请使用四位数年份。有关两位数年份的信息,请参阅two digit year cutoff 选项。
返回类型
int
返回值
每个 datepart 及其缩写都返回相同的值。
返回值因使用 SET LANGUAGE 和登录的默认语言设置的语言环境的不同而异。如果 date 为某些格式的字符串文字,则返回值由使用 SET DATEFORMAT 指定的格式来确定。当日期为日期或时间数据类型的列表达式时,SET DATEFORMAT 不影响返回值。
下表列出了所有 datepart 参数以及 SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10') 语句返回的相应值。date 参数的数据类型为 datetimeoffset(7)。nanoseconddatepart 返回值的小数位数为 9 位 (.123456700),并且最后两位始终为 00。
datepart |
返回值 |
---|---|
year, yyyy, yy |
2007 |
quarter, qq, q |
4 |
month, mm, m |
10 |
dayofyear, dy, y |
303 |
day, dd, d |
30 |
week, wk, ww |
45 |
weekday, dw |
1 |
hour, hh |
12 |
minute, n |
15 |
second, ss, s |
32 |
millisecond, ms |
123 |
microsecond, mcs |
123456 |
nanosecond, ns |
123456700 |
TZoffset, tz |
310 |
周和工作日日期部分参数
当 datepart 为 week (wk, ww) 或 weekday (dw) 时,返回值取决于使用 SET DATEFIRST 设置的值。
任何年份的 1 月 1 日都用来定义 weekdatepart 的起始数字,例如:DATEPART (wk, 'Jan 1, xxxx') = 1,其中 xxxx 为任意年份。
下表列出了针对每个不同的 SET DATEFIRST 参数,“2007-04-21”的 week 和 weekdaydatepart 返回值。1 月 1 日在 2007 年是星期日。4 月 21 日在 2007 年是星期六。SET DATEFIRST 7, Sunday 是美国英语的默认值。
SET DATEFIRST 参数 |
返回的 week |
返回的 weekday |
---|---|---|
1 |
16 |
6 |
2 |
17 |
5 |
3 |
17 |
4 |
4 |
17 |
3 |
5 |
17 |
2 |
6 |
17 |
1 |
7 |
16 |
7 |
年、月和日日期部分参数
DATEPART (year, date)、DATEPART (month, date) 和 DATEPART (day, date) 的返回值分别与函数 YEAR、MONTH 和 DAY 的返回值相同。
ISO_WEEK datepart
ISO 8601 包括 ISO 周-日期系统,即周的编号系统。每周都与该周内星期四所在的年份关联。例如,2004 年的第一周 (2004W01) 是指从 2003 年 12 月 29 日(星期一)到 2004 年 1 月 4 日(星期日)。一年中最大的周编号可能是 52 或 53。此样式的编号通常用于欧洲国家/地区,其他地方很少使用。
不同的国家/地区的编号系统可能不符合 ISO 标准。现在至少可能存在六种编号系统,如下表所示:
每周的第一天 |
一年的第一周包含 |
分配两次的周 |
使用的国家/地区 |
---|---|---|---|
星期日 |
1 月 1 日, 第一个星期六, 其中有 1–7 天属于此年 |
是 |
美国 |
星期一 |
1 月 1 日, 第一个星期日, 其中有 1–7 天属于此年 |
是 |
大多数欧洲国家和英国 |
星期一 |
1 月 4 日, 第一个星期四, 其中有 4-7 天属于此年 |
否 |
ISO 8601,挪威和瑞典 |
星期一 |
1 月 7 日, 第一个星期一, 7 天均属于此年 |
否 |
|
星期三 |
1 月 1 日, 第一个星期二, 其中有 1–7 天属于此年 |
是 |
|
星期六 |
1 月 1 日, 第一个星期五, 其中有 1–7 天属于此年 |
是 |
TZoffset
TZoffset (tz) 返回的是分钟数(带有签名)。下面的语句返回了 310 分钟的时区偏移量。
SELECT DATEPART (TZoffset, 2007-05-10 00:00:01.1234567 +05:10);
如果 datepart 参数为 TZoffset (tz) 并且 date 参数不是 datetimeoffset 数据类型,则返回 NULL。
对不在日期参数中的日期部分返回默认值
如果 date 参数的数据类型没有指定的 datepart,将返回 datepart 的默认值。
例如,任意 date 数据类型的默认年-月-日都为 1900-01-01。下面的语句具有 datepart 的日期部分参数、date 的时间参数,并返回 1900, 1, 1, 1, 2。
SELECT DATEPART(year, '12:10:30.123')
,DATEPART(month, '12:10:30.123')
,DATEPART(day, '12:10:30.123')
,DATEPART(dayofyear, '12:10:30.123')
,DATEPART(weekday, '12:10:30.123');
time 数据类型的默认时-分-秒为 00:00:00。下面的语句具有 datepart 的时间部分参数、date 的日期参数,并返回 0, 0, 0。
SELECT DATEPART(hour, '2007-06-01')
,DATEPART(minute, '2007-06-01')
,DATEPART(second, '2007-06-01');
秒的小数形式
返回的秒的小数形式如下面的语句所示:
SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456
SELECT DATEPART(nanosecond, '00:00:01.1234567'); -- Returns 123456700
注释
DATEPART 可用于选择列表 WHERE、HAVING、GROUP BY 和 ORDER BY 子句中。在 SQL Server 2008 中,DATEPART 将字符串文字作为 datetime2 类型隐式转换。这就意味着,日期在作为字符串传递时,DATEPART 不再支持 YDM 格式。您必须先将字符串显式转换为 datetime 或 smalldatetime 类型,然后才能使用 YDM 格式。
示例
下面的示例返回基准年。基准年对于日期计算非常有用。在下面的示例中,日期将指定为数字。请注意,SQL Server 将 0 解释为 1900 年 1 月 1 日。
SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);
-- Returns: 1900 1 1 */