時間 (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][.小數秒數]

  • hh 是代表時區位移中時數的兩位數,範圍介於 0 至 14 之間。

  • mm 是代表時區位移中額外分鐘數的兩位數,範圍介於 0 至 59 之間。

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

如果小數秒數有效位數超過針對資料行所指定的值,字串就會被截斷,但不會發生錯誤。