DATEPART (Transact-SQL)

傳回代表指定 date 之指定 datepart 的整數。

如需所有 Transact-SQL 日期和時間資料類型與函數的概觀,請參閱<日期和時間資料類型與函數 (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 所指定的格式。當 date 是日期或時間資料類型的資料行運算式時,SET DATEFORMAT 並不會影響傳回值。

下表針對陳述式 SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10') 列出所有 datepart 引數和對應的傳回值。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

week 和 weekday datepart 引數

當 datepart 是 week (wkww) 或 weekday (dw) 時,傳回值就會相依於使用 SET DATEFIRST 所設定的值。

任何一年的 1 月 1 日都定義了 weekdatepart 的起始數字,例如:DATEPART (wk, 'Jan 1, xxxx') = 1,其中 xxxx 是任何一年。

下表針對每個 SET DATEFIRST 引數的 '2007-04-21',列出 week 和 weekdaydatepart 的傳回值。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) 所傳回的值分別與 YEARMONTHDAY 函數傳回的值相同。

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 是 smalldatetime 時,秒就會傳回成 00。

針對不在 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

備註

DATEPART 可用於選取清單、WHERE、HAVING、GROUP BY 和 ORDER BY 子句中。在 SQL Server 2008 中,DATEPART 會隱含地將字串常值轉換為 datetime2 類型。搭配 DATEADD 使用 DATEPART 時,請避免字串常值的隱含轉換。如需詳細資訊,請參閱<DATEADD (Transact-SQL)>。

範例

下列範例會傳回基底年份。基底年份可用於日期計算。在此範例中,日期會指定為數字。請注意,SQL Server 會將 0 解譯為 1900 年 1 月 1 日。 

SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);
-- Returns: 1900    1    1 */