datetimeoffset (Transact-SQL)

用于定义一个与采用 24 小时制并可识别时区的一日内时间相组合的日期。

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

datetimeoffset 说明

属性

语法

datetimeoffset [ (fractional seconds precision) ]

用法

DECLARE @MyDatetimeoffset datetimeoffset(7)

CREATE TABLE Table1 ( Column1 datetimeoffset(7) )

默认字符串文字格式(用于下级客户端)

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]

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

日期范围

0001-01-01 到 9999-12-31

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

时间范围

00:00:00 到 23:59:59.9999999

时区偏移量范围

  • -14:00 到 +14:00

各元素的范围

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

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

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

hh 是表示小时的两位数字,范围为 00 到 23。

mm 是表示分钟的两位数字,范围为 00 到 59。

ss 是表示秒钟的两位数字,范围为 00 到 59。

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

hh 是两位数,范围为 -14 到 +14。

mm 是两位数,范围为 00 到 59。

字符长度

最低 26 位 (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) 到最高 34 位 (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)

精度、小数位数

指定的小数位数结果 (精度, 小数位数)列长度(以字节为单位)秒的小数部分精度
datetimeoffset (34,7)107
datetimeoffset(0) (26,0)80-2
datetimeoffset(1) (28,1)80-2
datetimeoffset(2) (29,2)80-2
datetimeoffset(3) (30,3)93-4
datetimeoffset(4) (31,4)93-4
datetimeoffset(5) (32,5)105-7
datetimeoffset(6) (33,6)105-7
datetimeoffset(7) (34,7)105-7

存储大小

默认值为 10 个字节的固定大小,默认的秒的小数部分精度为 100ns。

精确度

100 纳秒

默认值

1900-01-01 00:00:00 00:00

日历

公历

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

时区偏移量感知和保留

夏时制感知

datetimeoffset 支持的字符串文字格式

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

ISO 8601

说明

YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

这两种格式不受 SET LANGUAGE 和 SET DATEFORMAT 会话的区域设置的影响。datetimeoffset 与 datetime 部分之间不允许有空格。

YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC)

这种遵从 ISO 定义的格式表明 datetime 部分应采用协调世界时 (UTC) 表示。例如,1999-12-12 12:30:30.12345 -07:00 应表示为 1999-12-12 19:30:30.12345Z。

时区偏移量

时区偏移量指定某个 time 或 datetime 值相对于 UTC 的时区偏移量。时区偏移量可以表示为 [+|-] hh:mm:

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

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

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

时区偏移量的范围遵循 XSD 架构定义的 W3C XML 标准,与 SQL 2003 标准定义(12:59 到 +14:00)略有不同。

可选的类型参数 fractional seconds precision 指定了秒小数部分的位数。该值可以是一个 0 到 7(100 纳秒)的整数。默认 fractional seconds precision 为 100ns(秒小数部分有 7 位)。

此数据存储在数据库中,并以与 UTC 相同的方式在服务器中进行处理、比较、排序和索引。时区偏移量将保留在数据库中以供检索。

给定时区偏移量将假定为可以识别夏时制时间 (DST),并会针对 DST 期间内的任何给定 datetime 进行调整。

对于 datetimeoffset 类型,在插入、更新、转换或赋值操作中将验证 UTC 和本地(相对于一致的或转换的时区偏移量)datetime 值。如果检测到任何无效的 UTC 或本地(相对于一致的或转换的时区偏移量)datetime 值,将引发一个无效值错误。例如,9999-12-31 10:10:00 在 UTC 中有效,但在本地时间中会溢出时区偏移量 +13:50。

对 ANSI 和 ISO 8601 的遵从性

datetime 主题的“对 ANSI 和 ISO 8601 的遵从性”部分也适用于 datetimeoffset。

示例

下例比较了将一个字符串分别转换为各种 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'
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS
        'datetimeoffset IS08601';

下面是结果集:

数据类型

输出

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