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 |
時區位移範圍 |
|
元素範圍 |
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 的當地時間中則會發生溢位。
範例
下列範例會比較將字串轉換成每個 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 |