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 |
时区偏移量范围 |
|
各元素的范围 |
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。
示例
下例比较了将一个字符串分别转换为各种 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 |