日期名(Transact-SQL)

适用于:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics分析平台系统(PDW)Microsoft Fabric中的SQL数据库

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

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)

Transact-SQL 语法约定

语法

DATENAME ( datepart , date )  

参数

datepart
将返回的 date 参数的特定部分DATENAME。 此表列出了所有有效的 datepart 参数 。

注意

对于 datepart 参数,DATENAME 不接受用户定义的变量等效项 。

datepart 缩写形式
year yy、yyy
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 伊索克,伊索沃

date

可解析为下列某种数据类型的表达式:

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time

对于 date, 接受列表达式、表达式、字符串文本或用户定义的变量 。 使用四位数年份可避免含糊不清问题。 有关两位数年份的信息,请参阅配置两位数年份截止服务器配置选项

返回类型

nvarchar

返回值

  • 每个 datepart 及其缩写都返回相同的值 。

返回值取决于 SET LANGUAGE 和登录时选择的配置默认语言服务器配置选项设定的语言环境。 如果 date 是某些格式的字符串文本,则返回值取决于 SET DATEFORMAT 。 当 date 为日期或时间数据类型的列表达式时,SET DATEFORMAT 不更改返回值。

当 date 参数具有 date 数据类型参数时,返回值取决于 SET DATEFIRST 指定的设置

TZoffset 日期部分参数

如果 datepart 参数为 TZoffset (tz),并且 date 参数没有时区偏移量,则 返回 0DATEADD

smalldatetime 日期参数

当 date 为 smalldatetime 时, 返回的秒显示为 00DATENAME

对不在日期参数中的日期部分返回默认值

如果 date 参数的数据类型不具有特定的 datepart,则仅当 date 参数具有文本时, 才返回该 datepart 的默认值DATENAME

例如,任意 date 数据类型的默认年-月-日都为 1900-01-01 。 此语句具有 datepart 的日期部分参数、date 的时间参数,并且 返回 DATENAME1900, 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, 将返回错误 9810 。 在此示例中,变量 @t 具有 time 数据类型。 示例失败,因为日期部分年份对于 time 数据类型无效 :

DECLARE @t time = '12:10:30.123';   
SELECT DATENAME(year, @t);  

备注

在以下子句中使用 DATENAME

  • 按组汇总
  • HAVING
  • 排序依据
  • SELECT <列表>
  • 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 返回值
年份,耶耶,耶 2007
四分之一,QQ,Q 4
month, mm, m 10 月
年份日,DY,Y 303
日、日、日 30
周、周、周、周 44
工作日,DW 星期二
hour, hh 12
minute, n 15
第二,SS,S 32
毫秒,密西比州 123
微秒,MCS 123456
纳秒,N 123456700
TZoffset, tz +05:10
ISO_WEEK,伊索克,伊索沃 44

Azure Synapse Analytics 和 Analytics Platform System (PDW)

此示例返回指定日期的日期部分。 用表中的 datepart 值替换 SELECT 语句中的 参数datepart

SELECT DATENAME(datepart,'2007-10-30 12:15:32.1234567 +05:10');  

结果集如下。

datepart 返回值
年份,耶耶,耶 2007
四分之一,QQ,Q 4
month, mm, m 10 月
年份日,DY,Y 303
日、日、日 30
周、周、周、周 44
工作日,DW 星期二
hour, hh 12
minute, n 15
第二,SS,S 32
毫秒,密西比州 123
微秒,MCS 123456
纳秒,N 123456700
TZoffset, tz +05:10
ISO_WEEK,伊索克,伊索沃 44

另请参阅

CAST 和 CONVERT (Transact-SQL)