DATENAME (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

此函数返回表示指定 date 的指定 datepart 的字符串

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间数据类型及函数 (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

另请参阅

CAST 和 CONVERT (Transact-SQL)