共用方式為


約會部分(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 資料庫

此函式會傳回整數,代表指定 date 的指定 datepart

如需所有 Transact-SQL 日期和時間資料類型與函式的概觀,請參閱日期和時間資料類型與函式 (Transact-SQL)

Transact-SQL 語法慣例

語法

DATEPART ( datepart , date )  

引數

datepart
date 引數的特定部分,其 DATEPART 會傳回整數。 此表格會列出所有有效的 datepart 引數。

注意

DATEPART 不會接受 datepart 引數的使用者定義變數對等項目。

datepart 縮寫
year yy,yyyy
quarter qq,q
month 毫米
dayofyear Dyy
day ddd
week
weekday dw
hour hh
minute 米,N
second SSS
millisecond ms
microsecond mcs
nanosecond ns
tzoffset tz
iso_week isowkisoww

date
可解析成下列其中一個資料類型的運算式:

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time

針對 dateDATEPART 會接受資料行運算式、運算式、字串常值或使用者定義變數。 請使用四位數年份以避免模糊不清的問題。 如需兩位數年份的資訊,請參閱設定兩位數年份的截止伺服器設定選項

傳回類型

int

傳回值

每個 datepart 及其縮寫都會傳回相同的值。

傳回值會取決於使用 SET LANGUAGE 及登入的設定 default language 伺服器設定選項而設定的語言環境,而有所不同。 如果 date 是某些格式的字串常值,傳回值就會取決於 SET DATEFORMAT。 當 date 是日期或時間資料類型的資料行運算式時,SET DATEFORMAT 並不會變更傳回值。

此表格針對陳述式 列出所有 SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10') 引數和對應的傳回值。 date 引數具有 datetimeoffset(7) 資料類型。 nanoseconddatepart 傳回值的最後兩個位置一律00為 ,且此值小數字數為 9:

.123456700

datepart 傳回值
year、yyyy、yy 2007
quarter、qq、q 4
month、mm、m 10
dayofyear、dy、y 303
day、dd、d 30
week、wk、ww 44
weekday、dw 3
hour、hh 12
minute、n 15
second、ss、s 32
millisecond、ms 123
microsecond、mcs 123456
nanosecond、ns 123456700
tzoffset、tz 310
iso_week、isowk、isoww 44

Week 和 weekday datepart 引數

針對 week (wkww) 或 weekday (dw) datepartDATEPART 傳回值會取決於 SET DATEFIRST 所設定的值。

任何年份的 1 月 1 日會定義星期 datepart起始編號。 例如:

DATEPART (wk, 'January 1, xxxx') = 1

其中 xxxx 是任何一年。

下表針對每個 SET DATEFIRST 自變數顯示 '2007-04-21' 之周和工作日 datepart 的傳回值。 2007 年 1 月 1 日是星期一。 2007 年 4 月 21 日是星期六。 針對美國英文,

SET DATEFIRST 7 -- ( Sunday )

可作為預設值。 設定 DATEFIRST 之後,請使用針對 datepart 資料表值建議的這個 SQL 陳述式:

SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')

先定日期

引數
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 (yeardate)、DATEPART (monthdate) 和 DATEPART (daydate) 所傳回的值分別與 YEARMONTHDAY 函式傳回的值相同。

iso_week 日期部分

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 日,

第一個星期一,

一年中的七天
星期三 1 月 1 日,

第一個星期二,

一年的第 1-7 天
星期六 1 月 1 日,

第一個星期五,

一年的第 1-7 天

tzoffset

DATEPART 會以分鐘數 (帶正負號) 傳回 tzoffset (tz) 值。 此陳述式會傳回 310 分鐘的時區位移:

SELECT DATEPART (tzoffset, '2007-05-10  00:00:01.1234567 +05:10');  

DATEPART 轉譯 tzoffset 值的方式如下:

  • 針對 datetimeoffset 和 datetime2,tzoffset 傳回的時間位移會以分鐘為單位,而 datetime2 的位移一律是 0 分鐘。
  • 針對可以隱含轉換成 datetimeoffsetdatetime2 的資料類型,DATEPART 會以分鐘數傳回時間位移。 例外:其他日期/時間資料類型。
  • 所有其他類型的參數都會導致錯誤。

smalldatetime date 引數

對於 smalldatetime日期值,DATEPART會傳回秒 00。

針對不在 date 引數中的 datepart 所傳回的預設值

如果 date 引數的資料類型沒有指定的 datepart,只有在為 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');  

如果 date 指定為變數或資料表資料行,而該變數或資料行的資料類型沒有指定的 datepartDATEPART 會傳回錯誤 9810。 在此範例中,變數 @t 具有 time 資料類型。 此範例會失敗,因為 DATEPART year 對 time 資料類型無效:

DECLARE @t time = '12:10:30.123';   
SELECT DATEPART(year, @t);  

小數秒數

這些陳述式顯示 DATEPART 會傳回小數秒數:

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 可用於 SELECT 清單、WHERE、HAVING、GROUP BY 和 ORDER BY 子句中。

DATEPART 會隱含地將字串常值轉換為 SQL Server 2008 (10.0.x) 或更新版本中的 datetime2 類型。 這表示,將日期當做字串傳遞時,DATENAME 不支援 YDM 格式。 您必須明確地將字串轉換為 datetimesmalldatetime 類型,才能使用 YDM 格式。

範例

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

SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);  

-- Returns: 1900    1    1 

此範例會傳回日期 12/20/1974 的日期部分。

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;  

-- Returns: 20

此範例會傳回日期 12/20/1974 的年份部分。

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;  

-- Returns: 1974

另請參閱

CAST 和 CONVERT (Transact-SQL)DATETRUNC