時間 (Transact-SQL)
定義一天的時間。這個時間不含時區感知,而且是以 24 小時制為基礎。
如需所有 Transact-SQL 日期和時間資料類型與函數的概觀,請參閱<日期和時間函數 (Transact-SQL)>。如需日期和時間資料類型與函數常用的資訊和範例,請參閱<使用日期和時間資料>。
time 描述
屬性 |
值 |
---|---|
語法 |
time [ (fractional second precision) ] |
使用方式 |
DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) |
fractional seconds precision |
指定秒鐘小數部分的位數。 這可以是介於 0 至 7 之間的整數。 預設的小數有效位數是 7 (100ns)。 |
使用方式 |
DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) |
預設的字串常值格式 (用於下層用戶端) |
hh:mm:ss[.nnnnnnn] 如需詳細資訊,請參閱<使用日期和時間資料>的「下層用戶端的回溯相容性」一節。 |
範圍 |
00:00:00.0000000 到 23:59:59.9999999 |
元素範圍 |
hh 是代表小時的兩位數,範圍介於 0 至 23 之間。 mm 是代表分鐘的兩位數,範圍介於 0 至 59 之間。 ss 是代表秒鐘的兩位數,範圍介於 0 至 59 之間。 n* 是代表小數秒數的零至七位數,範圍介於 0 至 9999999 之間。 |
字元長度 |
最小 8 個位置 (hh:mm:ss),最大 16 個位置 (hh:mm:ss.nnnnnnn) |
有效位數,小數位數 (使用者僅指定小數位數) |
指定的小數位數結果 (有效位數,小數位數)資料行長度 (以位元組為單位)小數 秒 有效位數
time (16,7)57
time(0) (8,0)30-2
time(1) (10,1)30-2
time(2) (11,2)30-2
time(3) (12,3)43-4
time(4) (13,4)43-4
time(5) (14,5)55-7
time(6) (15,6)55-7
time(7) (16,7)55-7
|
儲存體大小 |
5 個位元組 (固定) 是預設值,而且具有 100ns 小數秒數有效位數的預設值。 |
精確度 |
100 奈秒 |
預設值 |
00:00:00 這個值會用於從 date 隱含轉換成 datetime2 或 datetimeoffset 的附加時間部分。 |
使用者定義的小數秒數有效位數 |
是 |
時區位移感知和保留 |
否 |
日光節約感知 |
否 |
支援 time 的字串常值格式
下表顯示 time 資料類型的有效字串常值格式。
SQL Server |
描述 |
---|---|
hh:mm[:ss][:小數秒數][AM][PM] hh:mm[:ss][.小數秒數][AM][PM] hhAM[PM] hh AM[PM] |
無論您是否指定 AM,只要小時的值為 0 就表示午夜之後 (AM) 的小時。小時等於 0 時,無法指定 PM。 如果沒有指定 AM 或 PM,小時值 01 至 11 就代表正午之前的小時。指定為 AM 時,這些值就代表正午之前的小時。如果指定為 PM,這些值就代表正午之後的小時。 如果沒有指定 AM 或 PM,小時值 12 就代表從正午開始的小時。如果指定為 AM,此值就代表從午夜開始的小時。如果指定為 PM,此值就代表從正午開始的小時。例如,12:01 就是正午之後的 1 分鐘,也就是 12:01 PM,而 12:01 AM 則是午夜之後一分鐘。指定為 12:01 AM 與指定為 00:01 或 00:01 AM 是相同的。 如果未指定 AM 或 PM,從 13 到 23 的小時值就代表正午之後的小時。如果指定為 PM,這些值也代表正午之後的小時。當小時值為 13 至 23 時,則無法指定為 AM。 24 小時值無效。若要表示午夜,請使用 12: 00 AM 或 00:00。 毫秒前可以用冒號 (:) 或句號 (.)。如果使用冒號,數字是指千分之一秒。如果使用句號,一位數代表十分之一秒、二位數代表百分之一秒,而三位數代表千分之一秒。例如,12:30:20:1 表示 12:30 過 20 又千分之一秒;12:30:20.1 表示 12:30 過 20 又十分之一秒。 |
ISO 8601 |
附註 |
---|---|
hh:mm:ss hh:mm[:ss][.小數秒數] |
|
ODBC |
附註 |
---|---|
{t 'hh:mm:ss[.小數秒數]'} |
ODBC API 專用。 SQL Server 2008 中的函數,如同 SQL Server 2005。 |
符合 ANSI 和 ISO 8601 標準的 time
為了達成回溯相容並與現有日期和時間類型一致,因此不支援使用 24 小時制來代表午夜和超過 59 的閏秒 (如 ISO 8601 (5.3.2 和 5.3) 所定義)。SQL 2003 標準沒有定義這些項目。
預設字串常值格式 (用於下層用戶端) 將會符合 SQL 標準格式 (定義為 hh:mm:ss[.nnnnnnn])。這種格式與 TIME 的 ISO 8601 定義很相似 (不含小數秒數)。
範例
A. 比較 date 和 time 資料類型
下列範例會比較將字串轉換成每個 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 |
B. 將有效的時間字串常值插入 time(7) 資料行
下表將列出可插入 time(7) 資料類型之資料行的不同字串常值,以及之後儲存在該資料行中的值。
字串常值格式類型 |
插入的字串常值 |
儲存的 time(7) 值 |
描述 |
---|---|---|---|
SQL Server |
'01:01:01:123AM' |
01:01:01.1230000 |
當冒號 (:) 出現在小數秒數有效位數之前時,小數位數就無法超過三個位置,否則將會引發錯誤。 |
SQL Server |
'01:01:01.1234567 AM' |
01:01:01.1234567 |
指定為 AM 或 PM 時,時間就會採用 24 小時格式儲存,但不含常值 AM 或 PM。 |
SQL Server |
'01:01:01.1234567 PM' |
13:01:01.1234567 |
指定為 AM 或 PM 時,時間就會採用 24 小時格式儲存,但不含常值 AM 或 PM。 |
SQL Server |
'01:01:01.1234567PM' |
13:01:01.1234567 |
AM 或 PM 之前的空格是選擇性的。 |
SQL Server |
'01AM' |
01:00:00.0000000 |
如果只有指定小時,則所有其他值都是 0。 |
SQL Server |
'01 AM' |
01:00:00.0000000 |
AM 或 PM 之前的空格是選擇性的。 |
SQL Server |
'01:01:01' |
01:01:01.0000000 |
沒有指定小數秒數有效位數時,資料類型所定義的每個位置都是 0。 |
ISO 8601 |
'01:01:01.1234567' |
01:01:01.1234567 |
若要符合 ISO 8601,請使用 24 小時格式,而非 AM 或 PM。 |
ISO 8601 |
'01:01:01.1234567 +01:01' |
01:01:01.1234567 |
雖然輸入中允許使用選擇性的時區差異 (TZD),但是不會進行儲存。 |
C. 將時間字串常值插入每個 date 和 time 資料類型的資料行
在下表中,第一個資料行會顯示即將插入 date 或 time 資料類型 (顯示於第二個資料行) 之資料庫資料表資料行的時間字串常值。第三個資料行會顯示將儲存在資料庫資料表資料行中的值。
插入的字串常值 |
資料行資料類型 |
儲存在資料行中的值 |
描述 |
---|---|---|---|
'12:12:12.1234567' |
time(7) |
12:12:12.1234567 |
如果小數秒數有效位數超過針對資料行所指定的值,字串就會被截斷,但不會發生錯誤。 |
'2007-05-07' |
date |
NULL |
任何時間值都會導致 INSERT 陳述式失敗。 |
'12:12:12' |
smalldatetime |
1900-01-01 12:12:00 |
任何小數秒數有效位數值都會導致 INSERT 陳述式失敗。 |
'12:12:12.123' |
datetime |
1900-01-01 12:12:12.123 |
任何長度超過三個位置的秒數有效位數都會導致 INSERT 陳述式失敗。 |
'12:12:12.1234567' |
datetime2(7) |
1900-01-01 12:12:12.1234567 |
如果小數秒數有效位數超過針對資料行所指定的值,字串就會被截斷,但不會發生錯誤。 |
'12:12:12.1234567' |
datetimeoffset(7) |
1900-01-01 12:12:12.1234567 +00:00 |
如果小數秒數有效位數超過針對資料行所指定的值,字串就會被截斷,但不會發生錯誤。 |