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字符串函数