datetime (Transact-SQL)
定義日期,並結合了以 24 小時制為基礎的當日時間和小數秒數。
[!附註]
請針對新的工作使用 time、date、datetime2 和 datetimeoffset 資料類型。 這些類型符合 SQL 標準。 它們具有方便移植的特性。 time、datetime2 和 datetimeoffset 會提供更多秒數有效位數。 datetimeoffset 可對全域部署的應用程式提供時區支援。
datetime 描述
屬性 |
值 |
---|---|
語法 |
datetime |
使用方式 |
DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) |
預設的字串常值格式 (用於下層用戶端) |
不適用 |
日期範圍 |
1753 年 1 月 1 日到 9999 年 12 月 31 日 |
時間範圍 |
00:00:00 到 23:59:59.997 |
時區位移範圍 |
無 |
元素範圍 |
YYYY 是代表年份的四位數,範圍介於 1753 至 9999 之間。 MM 是代表指定年份中某個月份的兩位數,範圍介於 01 至 12 之間。 DD 是代表指定月份中某個日期的兩位數,範圍介於 01 至 31 之間 (視月份而定)。 hh 是代表小時的兩位數,範圍介於 00 至 23 之間。 mm 是代表分鐘的兩位數,範圍介於 00 至 59 之間。 ss 是代表秒鐘的兩位數,範圍介於 00 至 59 之間。 n* 是代表小數秒數的零至三位數,範圍介於 0 至 999 之間。 |
字元長度 |
最小 19 個位置,最大 23 個位置 |
儲存體大小 |
8 位元組 |
精確度 |
四捨五入成 .000、.003 或 .007 秒的遞增。 |
預設值 |
1900-01-01 00:00:00 |
日曆 |
西曆 (不含年份的完整範圍)。 |
使用者自訂的小數秒數有效位數 |
否 |
時區位移感知和保留 |
否 |
日光節約感知 |
否 |
支援 datetime 的字串常值格式
下表將列出支援 datetime 的字串常值格式。 除了 ODBC 以外,datetime 字串常值都位於單引號 (') 中,例如 'string_literaL'。 如果環境不是 us_english,字串常值就必須採用 N'string_literaL' 格式。
數值 |
說明 |
---|---|
日期格式: [0]4/15/[19]96 -- (mdy) [0]4-15-[19]96 -- (mdy) [0]4.15.[19]96 -- (mdy) [0]4/[19]96/15 -- (myd) 15/[0]4/[19]96 -- (dmy) 15/[19]96/[0]4 -- (dym) [19]96/15/[0]4 -- (ydm) [19]96/[0]4/15 -- (ymd) 時間格式: 14:30 14:30[:20:999] 14:30[:20.9] 4am 4 PM |
您可以使用指定的數值月份來指定日期資料。 例如,5/20/97 代表 1997 年 5 月 20 日。 當您使用數值日期格式時,請在使用斜線 (/)、連字號 (-) 或句號 (.) 做為分隔符號的字串中指定月、日和年。 此字串必須以下列形式出現:
將語言設成 us_english 時,日期的預設順序是 mdy。 您可以使用 SET DATEFORMAT 陳述式來變更日期順序。 SET DATEFORMAT 陳述式的設定會影響日期值的解譯方式。 如果順序與設定不符,就不會將值解譯為日期 (因為超出範圍),否則這些值會被誤解。 例如,依 DATEFORMAT 設定而定,可以將 12/10/08 解譯為六種日期之一。 四部分的年份會解譯為年份。 |
字母順序 |
說明 |
---|---|
Apr[il] [15][,] 1996 Apr[il] 15[,] [19]96 Apr[il] 1996 [15] [15] Apr[il][,] 1996 15 Apr[il][,][19]96 15 [19]96 apr[il] [15] 1996 apr[il] 1996 APR[IL] [15] 1996 [15] APR[IL] |
您可以使用指定為完整月份名稱的月份來指定日期資料。 例如,April 或該月份在目前語言中指定的縮寫 Apr。逗號是選擇性且會忽略大小寫。 以下是使用字母日期格式的一些指導方針:
如果以字母形式指定月份,就不適用 SET DATEFORMAT 工作階段設定。 |
ISO 8601 |
說明 |
---|---|
YYYY-MM-DDThh:mm:ss[.mmm] YYYYMMDD[ hh:mm:ss[.mmm]] |
範例:
若要使用 ISO 8601 格式,您必須在格式中指定每個元素。 這也包括格式中所顯示的 T、冒號 (:) 以及句號 (.)。 括號指出秒數部分的小數是選擇性的。 時間部分是使用 24 小時格式所指定。 T 指出 datetime 值之時間部分的開始。 使用 ISO 8601 格式的優點在於它是國際標準,而且沒有模糊不清的規格。 另外,此格式不受 SET DATEFORMAT 或 SET LANGUAGE 設定值的影響。 |
未分隔 |
說明 |
---|---|
YYYYMMDD hh:mm:ss[.mmm] |
ODBC |
說明 |
||||||||
---|---|---|---|---|---|---|---|---|---|
{ ts '1998-05-02 01:23:56.123' } { d '1990-10-02' } { t '13:33:41' } |
ODBC API 定義了逸出序列來代表日期和時間值,供 ODBC 呼叫時間戳記資料。 由 SQL Server 的 Microsoft OLE DB 提供者所支援的 OLE DB 語言定義 (DBGUID-SQL) 也支援 ODBC 時間戳記格式。 使用 ADO、OLE DB 與 ODBC 架構 API 的應用程式都可以使用這個 ODBC 時間戳記格式來代表日期和時間值。 ODBC 時間戳記格式逸出序列的格式如下: { literal_type 'constant_value' }:
|
datetime 小數秒數有效位數的四捨五入
datetime 值會捨入到 .000、.003 或 .007 秒的遞增,如下表所示。
使用者指定的值 |
系統預存值 |
---|---|
01/01/98 23:59:59.999 |
1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
ANSI 和 ISO 8601 標準
datetime 不符合 ANSI 或 ISO 8601 標準。
轉換日期和時間資料
當您轉換成日期與時間資料類型時,SQL Server 會拒絕所有無法辨識為日期或時間的值。 如需有關 CAST 及 CONVERT 函數與日期和時間資料搭配使用的詳細資訊,請參閱<CAST 和 CONVERT (Transact-SQL)>。
將 datetime 轉換成其他日期與時間類型
下表說明當 datetime 資料類型轉換成其他日期和時間資料類型時,可能發生的狀況。
資料類型要轉換成 |
轉換詳細資料 |
---|---|
date |
年、月和日都會複製。 時間元件會設定為 00:00:00.000。 下列程式碼顯示將 date 值轉換成 datetime 值的結果。
|
time(n) |
時間元件會複製,而日期元件會設定為 '1900-01-01'。 如果 time(n) 值的小數有效位數大於三位數,此值將會被截斷以配合其大小。 下列範例顯示將 time(4) 值轉換成 datetime 值的結果。
|
smalldatetime |
將會複製時和分。 秒和小數秒數會設定為 0。 下列程式碼顯示將 smalldatetime 值轉換成 datetime 值的結果。
|
datetimeoffset(n) |
日期和時間元件都會複製。 時區則會被截斷。 如果 datetimeoffset(n) 值的小數有效位數大於三位數,此值將會被截斷。 下列範例顯示將 datetimeoffset(4) 值轉換成 datetime 值的結果。
|
datetime2(n) |
將會複製日期和時間。 如果 datetime2(n) 值的小數有效位數大於三位數,此值將會被截斷。 下列範例顯示將 datetime2(4) 值轉換成 datetime 值的結果。
|
範例
下列範例會比較將字串轉換成每個 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 |