日期 (Transact-SQL)

定义一个日期。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

date 说明

属性

语法

date

用法

DECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )

默认的字符串文字格式

(用于下级客户端)

YYYY-MM-DD

有关详细信息,请参阅使用日期和时间数据的“下级客户端的向后兼容性”部分。

范围

0001-01-01 到 9999-12-31

公元元年 1 月 1 日到公元 9999 年 12 月 31 日

各元素的范围

YYYY 是表示年份的四位数字,范围为从 0001 到 9999。

MM 是表示指定年份中的月份的两位数字,范围为从 01 到 12。

DD 是表示指定月份中的某一天的两位数字,范围为从 01 到 31(最高值取决于具体月份)。

字符长度

10 位

精度、小数位数

10, 0

存储大小

固定 3 个字节

存储结构

1、3 字节整数存储日期。

精确度

一天

默认值

1900-01-01

此值用作从 time 隐式转换到 datetime2 或 datetimeoffset 时追加的日期部分。

日历

公历

用户定义的秒的小数部分精度

时区偏移量感知和保留

夏时制感知

date 支持的字符串文字格式

以下各表显示了适用于 date 数据类型的有效字符串文字格式。

数字日期格式

说明

mdy                         

[m]m/dd/[yy]yy       

[m]m-dd-[yy]yy       

[m]m.dd.[yy]yy       

myd                         

mm/[yy]yy/dd       

mm-[yy]yy/dd       

[m]m.[yy]yy.dd       

dmy                         

dd/[m]m/[yy]yy       

dd-[m]m-[yy]yy       

dd.[m]m.[yy]yy       

dym                         

dd/[yy]yy/[m]m       

dd-[yy]yy-[m]m       

dd.[yy]yy.[m]m       

ymd                         

[yy]yy/[m]m/dd       

[yy]yy-[m]m-dd       

[yy]yy-[m]m-dd       

[m]m、dd 和 [yy]yy 在字符串中表示月、日和年,使用斜线 (/)、连字符 (-) 或句点 (.)作为分隔符。

仅支持四位或两位数字表示的年份。请尽可能使用以四位数字表示的年份。若要指定一个位于 0001 到 9999 之间的整数来表示用于将两位数年份解释为四位数年份的截止年份,请使用two digit year cutoff 选项

一个比截止年份的后两位数字小或者与其相等的两位数年份与该截止年份处于同一个世纪。而一个比截止年份的后两位数字大的两位数年份所处的世纪为该截止年份所处世纪的上一个世纪。例如,如果“两位数年份截止”为默认值 2049,则两位数年份 49 被解释为 2049 年,而两位数年份 50 被解释为 1950 年。

默认日期格式由当前语言设置决定。可以通过使用 SET LANGUAGESET DATEFORMAT 语句更改日期格式。

date 不支持 ydm 格式。

字母

说明

mon [dd][,] yyyy      

mon dd[,] [yy]yy      

mon yyyy [dd]          

[dd] mon[,] yyyy      

dd mon[,][yy]yy       

dd [yy]yy mon         

[dd] yyyy mon         

yyyy mon [dd]         

yyyy [dd] mon         

mon 表示采用当前语言的完整月份名称或月份缩写。逗号是可选的,且忽略大小写。

为避免不确定性,请使用四位数年份。

如果没有指定日,则默认为当月第一天。

ISO 8601

说明

YYYY-MM-DD            

YYYYMMDD               

与 SQL 标准相同。这是唯一定义为国际标准的格式。

未分隔的

说明

[yy]yymmdd            

yyyy[mm][dd]          

可用四位、六位或八位数字来指定 date 数据。六位或八位字符串始终被解释为 ymd。月和日必须始终是两位数字。四位字符串被解释为年。

ODBC

说明

{ d 'yyyy-mm-dd' }   

特定于 ODBC API。

在 SQL Server 2008 中的工作方式与在 SQL Server 2005 中相同。

W3C XML 格式

说明

yyyy-mm-ddTZD      

专为用于 XML/SOAP 而支持的格式。

TZD 是时区指示符(Z 或 +hh:mm 或 -hh:mm):

  • hh:mm 表示时区偏移量。hh 是两位数,范围为 0 到 14,它表示时区偏移量中的小时数。

  • MM 是两位数,范围为 0 到 59,它表示时区偏移量中的额外分钟数。

  • +(加)或 –(减)是时区偏移量中必须包含的符号。这两个符号表示用协调世界时 (UTC) 加上或减去时区偏移量以得出本地时间。时区偏移量的有效范围为 -14:00 到 +14:00。

对 ANSI 和 ISO 8601 的遵从性

date 符合公历的 ANSI SQL 标准定义:“NOTE 85 - Datetime data types will allow dates in the Gregorian format to be stored in the date range 0001–01–01 CE through 9999–12–31 CE”(备注 85 – 日期时间数据类型将允许存储日期范围从 0001–01–01 CE 到 9999–12–31 CE 之间的公历格式的日期)。

默认字符串文字格式(用于下级客户端)将遵照 SQL 标准格式(定义为 YYYY-MM-DD)。该格式与 ISO 8601 对 DATE 的定义相同。

示例

下例比较了将一个字符串分别转换为各种日期和时间数据类型时所产生的结果。

SELECT 
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' 
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 
        'smalldatetime' 
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 
        'datetime2'
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 
        'datetimeoffset';

下面是结果集:

数据类型

输出

time

12:35:29. 1234567

date

2007-05-08

smalldatetime

2007-05-08 12:35:00

datetime

2007-05-08 12:35:29.123

datetime2

2007-05-08 12:35:29. 1234567

datetimeoffset

2007-05-08 12:35:29.1234567 +12:15