SQL Server Datename()函數

在本教學中,將學習如何使用SQL Server DATENAME()函數來獲取表示指定日期部分的字串。

SQL Server DATENAME()函數概述

DATENAME()函數返回一個字串NVARCHAR類型,表示指定日期部分,例如指定日期的年,月和日。

以下是DATENAME()函數的語法:

DATENAME(date_part,input_date)

DATENAME()函數接受兩個參數:

  • date_part是要返回的日期的一部分。下表列出了所有有效的日期部分值。
  • input_date是一個文字日期或運算式,可以解析為:TIMEDATESMALLDATETIMEDATETIMEDATETIME2DATETIMEOFFSET值。
date_part 縮寫形式
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

DATENAME()與DATEPART()區別

請注意,除返回類型外,DATENAME()類似於DATEPART()DATENAME()函數將日期部分作為字串返回,而DATEPART()將日期部分作為整數返回。

請參閱以下示例:

SELECT
    DATEPART(year, '2020-11-10') [datepart],
    DATENAME(year, '2020-11-10') [datename];

執行上面查詢語句,得到以下結果:

datepart    datename
----------- ------------------------------
2020        2020

(1 行受影響)

但是,它們的數據類型不同,如以下示例所示:

SELECT
    DATEPART(year, '2021-07-10') + '1' [datepart],
    DATENAME(year, '2021-07-10') + '1' [datename] ;

執行上面查詢語句,得到以下結果:

datepart    datename
----------- -------------------------------
2022        20211

(1 行受影響)

因為DATEPART()函數返回一個整數,所以運算式的計算結果為2022(即:2021 + 1)。 但是,DATENAME()函數返回一個字串,因此,+是連接運算符,它得到結果為:'20211'(即:'2021' + '1')

SQL Server DATENAME()函數示例

此示例使用DATENAME()函數返回'2022-11-12 11:22:33.1234567 +08:10'的各種日期部分:

DECLARE @dt DATETIME2= '2022-11-12 11:22:33.1234567 +08:10';

SELECT 'year,yyy,yy' date_part,
    DATENAME(year, @dt) result
UNION
SELECT 'quarter, qq, q',
    DATENAME(quarter, @dt)
UNION
SELECT 'month, mm, m',
    DATENAME(month, @dt)
UNION
SELECT 'dayofyear, dy, y',
    DATENAME(dayofyear, @dt)
UNION
SELECT 'day, dd, d',
    DATENAME(day, @dt)
UNION
SELECT 'week, wk, ww',
    DATENAME(week, @dt)
UNION
SELECT 'weekday, dw, w',
    DATENAME(week, @dt)
UNION
SELECT 'hour, hh' date_part,
    DATENAME(hour, @dt)
UNION
SELECT 'minute, mi,n',
    DATENAME(minute, @dt)
UNION
SELECT 'second, ss, s',
    DATENAME(second, @dt)
UNION
SELECT 'millisecond, ms',
    DATENAME(millisecond, @dt)
UNION
SELECT 'microsecond, mcs',
    DATENAME(microsecond, @dt)
UNION
SELECT 'nanosecond, ns',
    DATENAME(nanosecond, @dt)
UNION
SELECT 'TZoffset, tz',
    DATENAME(tz, @dt)
UNION
SELECT 'ISO_WEEK, ISOWK, ISOWW',
    DATENAME(ISO_WEEK, @dt);

執行上面查詢語句,得到以下結果:

date_part              result
---------------------- ------------------------------
day, dd, d             12
dayofyear, dy, y       316
hour, hh               11
ISO_WEEK, ISOWK, ISOWW 45
microsecond, mcs       123456
millisecond, ms        123
minute, mi,n           22
month, mm, m           11
nanosecond, ns         123456700
quarter, qq, q         4
second, ss, s          33
TZoffset, tz           +00:00
week, wk, ww           46
weekday, dw, w         46
year,yyy,yy            2022

(15 行受影響)

在本教學中,學習了如何使用SQL Server DATENAME()函數從日期中提取日期部分以字串形式返回。


上一篇: SQL Server日期函數 下一篇: SQL Server字串函數