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 月 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 至 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)>和<時間 (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 (秒鐘小數部分有七位數)。

這項資料會儲存於資料庫中,而且在伺服器中進行處理、比較、儲存和索引 (如同 UTC)。時區位移將保留在資料庫中以便日後擷取。

指定的時區位移將假設為日光節約時間 (DST) 感知並針對 DST 期間的任何指定 datetime 進行調整。

若為 datetimeoffset 類型,則 UTC 和當地 (永續或轉換的時區位移) datetime 值將在插入、更新、算數、轉換或指派作業期間進行驗證。如果偵測到無效的 UTC 或當地 (永續或轉換的時區位移) datetime 值,將會引發無效值的錯誤。例如,9999-12-31 10:10:00 在 UTC 中有效,但是在時區位移 +13:50 的當地時間中則會發生溢位。

ANSI 和 ISO 8601 標準

date>和<time>主題的「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