datetime (Transact-SQL)

定義日期,並結合了以 24 小時制為基礎的當日時間和小數秒數。

[!附註]

請針對新的工作使用 time、date、datetime2 和 datetimeoffset 資料類型。 這些類型符合 SQL 標準。 它們具有方便移植的特性。 time、datetime2 和 datetimeoffset 會提供更多秒數有效位數。datetimeoffset 會針對全域部署的應用程式提供時區支援。

如需所有 Transact-SQL 日期和時間資料類型與函數的概觀,請參閱<日期和時間資料類型與函數 (Transact-SQL)>。 如需日期和時間資料類型與函數常用的資訊和範例,請參閱<使用日期和時間資料>。

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 日。 當您使用數值日期格式時,請在使用斜線 (/)、連字號 (-) 或句號 (.) 的字串中指定月份、日期和年份。 。 此字串必須以下列形式出現:

  • number separator number separator number [time] [time]

將語言設成 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。逗號是選擇性且會忽略大小寫。

以下是使用字母日期格式的一些指導方針:

  • 將日期和時間資料括在單引號 (') 中。 若為英文以外的語言,請使用 N'。

  • 以括號括住的字元是選擇性的。

  • 如果只指定年份的後兩位數字,這些數值小於兩位數年份的截止組態選項的後兩位數字時,就與截止年份同一世紀。 數值如果大於或等於這個選項的值,就在截止年份的前一個世紀。 例如,如果兩位數年份的截止是 2050 (預設值),則 25 會解譯為 2025,而 50 則解譯為 1950。若要避免意義不明確,請使用四位數的年份。

  • 如果漏了日的部分,就用當月第一天。

如果以字母形式指定月份,就不適用 SET DATEFORMAT 工作階段設定。

ISO 8601

描述

YYYY-MM-DDThh:mm:ss[.mmm]

YYYYMMDDThh:mm:ss[.mmm]

範例:

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.487

若要使用 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' }:

  • literal_type 會指定逸出序列的類型。 時間戳記有三個 literal_type 規範:

    • d = 只有日期

    • t = 只有時間

    • ts = 時間戳記 (時間 + 日期)

  • 'constant_value' 是逸出序列的值。constant_value 必須遵循以下每個 literal_type 的格式。

    literal_typeconstant_value 格式
    d yyyy-mm-dd
    t hh:mm:ss[.fff]
    ts yyyy-mm-dd hh:mm:ss[.fff]

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 標準。

範例

下列範例會比較將字串轉換成每個 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