datetime2 (Transact-SQL)

定义结合了 24 小时制时间的日期。可将 datetime2 视作现有 datetime 类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义的精度。

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

datetime2 说明

属性

语法

datetime2 [ (fractional seconds precision) ]

用法

DECLARE @MyDatetime2 datetime2(7)

CREATE TABLE Table1 ( Column1 datetime2(7) )

默认的字符串文字格式

(用于下级客户端)

YYYY-MM-DD hh:mm:ss[.fractional seconds]

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

日期范围

0001-01-01 到 9999-12-31

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

时间范围

00:00:00 到 23:59:59.9999999

时区偏移量范围

各元素的范围

YYYY 是一个四位数,范围从 0001 到 9999,表示年份。

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

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

hh 是一个两位数,范围从 00 到 23,它表示小时。

mm 是一个两位数,范围从 00 到 59,它表示分钟。

ss 是一个两位数,范围从 00 到 59,它表示秒钟。

n* 代表 0 到 7 位数字,范围从 0 到 9999999,它表示秒小数部分。

字符长度

最低 19 位 (YYYY-MM-DD hh:mm:ss ),最高 27 位 (YYYY-MM-DD hh:mm:ss.0000000)

精度、小数位数

0 至 7 位,准确度为 100ns。默认精度为 7 位数。

存储大小

精度小于 3 时为 6 个字节;精度为 3 和 4 时为 7 个字节。所有其他精度则需要 8 个字节。

精确度

100 纳秒

默认值

1900-01-01 00:00:00

日历

公历

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

时区偏移量感知和保留

夏时制感知

有关数据类型元数据,请参阅 sys.systypes (Transact-SQL)TYPEPROPERTY (Transact-SQL)。某些日期和时间数据类型的精度和小数位数是可变的。若要获取列的精度和小数位数,请参阅 COLUMNPROPERTY (Transact-SQL)COL_LENGTH (Transact-SQL)sys.columns (Transact-SQL)

datetime2 支持的字符串文字格式

以下各表列出了适用于 datetime2 的支持的 ISO 8601 和 ODBC 字符串文字格式。有关 datetime2 日期和时间部分的字母、数字、未分隔和时间格式的信息,请参阅日期 (Transact-SQL)time (Transact-SQL)

ISO 8601

说明

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

此格式不受 SET LANGUAGE 和 SET DATEFORMAT 会话区域设置的影响。T、冒号 (:) 和句点 (.) 包括在字符串文字之内,如“2007-05-02T19:58:47.1234567”。

ODBC

说明

{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' }

特定于 ODBC API:

  • 小数点右侧的数字表示秒小数部分,可指定 0 到 7 位(100 纳秒)。

  • 在 SQL Server 2008 中,当兼容级别设置为 10 时,文字将在内部映射到新的 time 类型。

对 ANSI 和 ISO 8601 的遵从性

datetime2 符合日期时间的 ANSI 和 ISO 8601 标准。

示例

下例比较了将一个字符串转换为各种 date 和 time 数据类型的结果。

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