在本教程中,将学习如何使用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()函数从日期中提取日期部分以字符串形式返回。
						上一篇:
								SQL Server日期函数
												下一篇:
								SQL Server字符串函数
												
						
						
					
					
					