每個 datepart 及其縮寫都會傳回相同的值。
傳回值會根據使用 SET LANGUAGE 所設定的語言環境並依據登入的預設語言而不同。如果 date 是某些格式的字串常值,則傳回值會根據使用 SET DATEFORMAT 所指定的格式。當 date 是日期或時間資料類型的資料行運算式時,SET DATEFORMAT 並不會影響傳回值。
下表針對陳述式 SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10') 列出所有 datepart 引數和對應的傳回值。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
|
week 和 weekday datepart 引數
當 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 的傳回值。2007 年的 1 月 1 日是星期日。2007 年的 4 月 21 日是星期六。SET DATEFIRST 7 (星期日) 是 U.S. English 的預設值。
|
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
|
year、month 和 day datepart 引數
針對 DATEPART (year, date)、DATEPART (month, date) 和 DATEPART (day, date) 所傳回的值分別與 YEAR、MONTH 和 DAY 函數傳回的值相同。
ISO_WEEK datepart
ISO 8601 包含 ISO 週-日期系統 (週數的編號系統)。每一週都與星期四所在的年份相關聯。例如,2004 年第 1 週 (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。
smalldatetime date 引數
針對不在 date 引數中的 datepart 所傳回的預設值
如果 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