返回表示指定 date 的指定 datepart 的整数。
有关所有 Transact-SQL 日期和时间数据类型和函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)。
每个 datepart 及其缩写都返回相同的值。
返回值因使用 SET LANGUAGE 和登录的配置默认语言服务器配置选项设置的语言环境的不同而异。 如果 date 为某些格式的字符串文字,则返回值由使用SET DATEFORMAT 指定的格式来确定。 当日期为日期或时间数据类型的列表达式时,SET DATEFORMAT 不影响返回值。
下表列出了所有 datepart 参数以及 SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10') 语句返回的相应值。 date 参数的数据类型为 datetimeoffset(7)。 nanosecond datepart 返回值的小数位数为 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 日都用来定义 week datepart 的起始数字,例如:DATEPART (wk, 'Jan 1, xxxx') = 1,其中 xxxx 为任意年份。
下表列出了针对每个不同的 SET DATEFIRST 参数,“2007-04-21”的 week 和 weekday datepart 返回值。 1 月 1 日在 2007 年是星期日。 4 月 21 日在 2007 年是星期六。 SET DATEFIRST 7, Sunday 是 美国英语的默认值。
SET DATEFIRST 参数 | 返回的 周 | 返回的 工作日 |
---|---|---|
1 | 16 | 6 |
2 | 17 | 5 |
3 | 17 | 4 |
4 | 17 | 3 |
5 | 17 | 2 |
6 | 17 | 1 |
7 | 16 | 7 |
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 天属于此年 | 是 |
当 date 为 smalldatetime 时,秒的返回值为 00。
如果 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');