在本教程中,将学习如何使用SQL Server DATENAME()
函数来获取表示指定日期部分的字符串。
SQL Server DATENAME()函数概述
DATENAME()
函数返回一个字符串NVARCHAR
类型,表示指定日期部分,例如指定日期的年,月和日。
以下是DATENAME()
函数的语法:
DATENAME(date_part,input_date)
DATENAME()
函数接受两个参数:
date_part
是要返回的日期的一部分。下表列出了所有有效的日期部分值。input_date
是一个文字日期或表达式,可以解析为:TIME,DATE,SMALLDATETIME
,DATETIME
,DATETIME2或DATETIMEOFFSET
值。
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()
函数从日期中提取日期部分以字符串形式返回。