适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
此函数返回表示指定 date 的指定 datepart 的字符串。
有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)。
语法
DATENAME ( datepart , date )
参数
datepart
DATENAME 将返回的 date 参数的特定部分。 此表列出了所有有效的 datepart 参数 。
注意
对于 datepart 参数,DATENAME 不接受用户定义的变量等效项 。
| 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
对于 date,DATENAME 接受列表达式、表达式、字符串文本或用户定义的变量 。 使用四位数年份可避免含糊不清问题。 有关两位数年份的信息,请参阅配置两位数年份截止服务器配置选项。
返回类型
nvarchar
返回值
- 每个 datepart 及其缩写都返回相同的值 。
返回值取决于 SET LANGUAGE 和登录时选择的配置默认语言服务器配置选项设定的语言环境。 如果 date 是某些格式的字符串文本,则返回值取决于 SET DATEFORMAT 。 当 date 为日期或时间数据类型的列表达式时,SET DATEFORMAT 不更改返回值。
当 date 参数具有 date 数据类型参数时,返回值取决于 SET DATEFIRST 指定的设置。
TZoffset 日期部分参数
如果 datepart 参数为 TZoffset (tz),并且 date 参数没有时区偏移量,则 DATEADD 返回 0。
smalldatetime 日期参数
当 date 为 smalldatetime 时,DATENAME 返回的秒显示为 00。
对不在日期参数中的日期部分返回默认值
如果 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 指定为变量或表列,并且该变量或列的数据类型没有指定的 datepart,DATENAME 将返回错误 9810 。 在此示例中,变量 @t 具有 time 数据类型。 示例失败,因为日期部分年份对于 time 数据类型无效 :
DECLARE @t time = '12:10:30.123';
SELECT DATENAME(year, @t);
备注
在以下子句中使用 DATENAME:
- GROUP BY
- HAVING
- ORDER BY
- SELECT <list>
- WHERE
在 SQL Server 中,DATENAME 将字符串文字作为 datetime2 类型隐式转换。 也就是说,日期在作为字符串传递时,DATENAME 不支持 YDM 格式。 必须先将字符串显式转换为 datetime 或 smalldatetime 类型,然后才能使用 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 | 星期二 |
| 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 | 星期二 |
| 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 |