DATENAME (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

此函式會傳回字元字串,代表指定之 date 的指定 datepart

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

Transact-SQL 語法慣例

Syntax

DATENAME ( datepart , date )  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

datepart
DATENAME 會傳回之 date 引數的特定部分。 此表格會列出所有有效的 datepart 引數。

注意

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

datepart 縮寫
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw, w
hour hh
minute mi, n
second ss, s
millisecond ms
microsecond mcs
nanosecond ns
TZoffset tz
ISO_WEEK ISOWK, ISOWW

date

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

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

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

傳回類型

nvarchar

傳回值

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

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

date 參數具有 date 資料類型引數時,傳回值就會根據 SET DATEFIRST 所指定的設定而不同。

TZoffset datepart 引數

如果 datepart 引數是 TZoffset (tz) 而且 date 引數沒有時區位移時,DATEADD 就會傳回 0。

smalldatetime date 引數

datesmalldatetime 時,DATENAME 會以 00 形式傳回秒數。

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

如果 date 引數的資料類型沒有指定的 datepart,只有在 date 引數具有常值時,DATENAME 才會傳回該 datepart 的預設值。

例如,任何 date 資料類型的預設年-月-日都是 1900-01-01。 此陳述式具有 datepart 的日期部分引數、date 的時間引數,而且 DATENAME 會傳回 1900, January, 1, 1, Monday

SELECT DATENAME(year, '12:10:30.123')  
    ,DATENAME(month, '12:10:30.123')  
    ,DATENAME(day, '12:10:30.123')  
    ,DATENAME(dayofyear, '12:10:30.123')  
    ,DATENAME(weekday, '12:10:30.123');  

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

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

備註

在下列子句中使用 DATENAME

  • GROUP BY
  • HAVING
  • 排序依據
  • SELECT <list>
  • WHERE

在 SQL Server 中,DATENAME 會隱含地將字串常值轉換為 datetime2 類型。 換句話說,將日期當作字串傳遞時,DATENAME 不支援 YDM 格式。 您必須明確地將字串轉換為 datetimesmalldatetime 類型,才能使用 YDM 格式。

範例

此範例會針對指定的日期傳回日期部分。 請將資料表中的 datepart 值取代為 SELECT 陳述式中的 datepart 引數:

SELECT DATENAME(datepart,'2007-10-30 12:15:32.1234567 +05:10');

以下為結果集。

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 Tuesday
hour、hh 12
minute、n 15
second、ss、s 32
millisecond、ms 123
microsecond、mcs 123456
nanosecond、ns 123456700
TZoffset、tz +05:10
ISO_WEEK、ISOWK、ISOWW 44

Azure Synapse Analytics 和 Analytics Platform System (PDW)

此範例會針對指定的日期傳回日期部分。 請將資料表中的 datepart 值取代為 SELECT 陳述式中的 datepart 引數:

SELECT DATENAME(datepart,'2007-10-30 12:15:32.1234567 +05:10');  

以下為結果集。

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 Tuesday
hour、hh 12
minute、n 15
second、ss、s 32
millisecond、ms 123
microsecond、mcs 123456
nanosecond、ns 123456700
TZoffset、tz +05:10
ISO_WEEK、ISOWK、ISOWW 44

另請參閱

CAST 和 CONVERT (Transact-SQL)