日期和時間資料類型與函數 (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse Analytics

本文中的各節將說明所有 Transact-SQL 日期和時間資料類型與函數。

日期和時間資料類型

下表列出 Transact-SQL 日期和時間資料類型:

資料類型 格式 範圍 精確度 儲存體大小 (位元組) 使用者自訂的小數秒數有效位數 時區位移
time hh:mm:ss[.nnnnnnn] 00:00:00.0000000 到 23:59:59.9999999 100 奈秒 3 到 5
date YYYY-MM-DD 0001-01-01 到 31.12.99 1 日 3 No
smalldatetime YYYY-MM-DD hh:mm:ss 1900-01-01 到 2079-06-06 1 分鐘 4 No
datetime YYYY-MM-DD hh:mm:ss[.nnn] 1753-01-01 到 9999-12-31 0.00333 秒鐘 8 No No
datetime2 YYYY-MM-DD hh:mm:ss[.nnnnnnn] 0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999 100 奈秒 6 到 8
datetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm 0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999 (以 UTC 為單位) 100 奈秒 8 到 10 Yes Yes

注意

Transact-SQL rowversion 資料類型不是日期或時間資料類型。 timestamprowversion 的已取代同義字。

日期和時間函式

下表列出 Transact-SQL 日期和時間函數。 如需決定性的詳細資訊,請參閱決定性與非決定性函式

傳回系統日期和時間值的函數

Transact-SQL 會從執行 SQL Server 執行個體之電腦的作業系統衍生所有系統日期和時間值。

較高精確度的系統日期和時間函數

自 SQL Server 2008 (10.0.x) 起,資料庫引擎會透過使用 GetSystemTimeAsFileTime() Windows API 來衍生日期和時間值。 精確度取決於執行 SQL Server 執行個體的電腦硬體和 Windows 版本。 此 API 的精確度是固定於 100 奈秒。 請使用 GetSystemTimeAdjustment() Windows API 來判斷正確性。

函數 Syntax 傳回值 傳回資料類型 決定性
SYSDATETIME SYSDATETIME ( ) 傳回 datetime2(7) 值,此值包含執行 SQL Server 執行個體之電腦的日期和時間。 傳回的值不包含時區時差。 datetime2(7) 不具決定性
SYSDATETIMEOFFSET SYSDATETIMEOFFSET ( ) 傳回 datetimeoffset(7) 值,此值包含執行 SQL Server 執行個體之電腦的日期和時間。 傳回的值包含時區時差。 datetimeoffset(7) 不具決定性
SYSUTCDATETIME SYSUTCDATETIME ( ) 傳回 datetime2(7) 值,此值包含正在執行 SQL Server 執行個體之電腦的日期和時間。 此函式是以國際標準時間 (Coordinated Universal Time,UTC) 傳回日期和時間值。 datetime2(7) 不具決定性

較低精確度的系統日期和時間函數

函數 Syntax 傳回值 傳回資料類型 決定性
CURRENT_TIMESTAMP CURRENT_TIMESTAMP 傳回 datetime 值,此值包含執行 SQL Server 執行個體之電腦的日期和時間。 傳回的值不包含時區時差。 datetime 不具決定性
GETDATE GETDATE ( ) 傳回 datetime 值,此值包含執行 SQL Server 執行個體之電腦的日期和時間。 傳回的值不包含時區時差。 datetime 不具決定性
GETUTCDATE GETUTCDATE ( ) 傳回 datetime 值,此值包含執行 SQL Server 執行個體之電腦的日期和時間。 此函式是以國際標準時間 (Coordinated Universal Time,UTC) 傳回日期和時間值。 datetime 不具決定性

傳回日期和時間部分的函數

函數 Syntax 傳回值 傳回資料類型 決定性
DATE_BUCKET DATE_BUCKET ( datepart, number, date, origin ) origin 參數所定義的時間戳記 (如果未指定 origin 參數,則會從 1900-01-01 00:00:00.000 的預設原始值),傳回對應至每個日期時間值區起點的值。 傳回型別取決於提供給 date 的引數。 不具決定性
DATENAME DATENAME ( datepart, date ) 傳回字元字串,代表指定日期的指定 datepart nvarchar 不具決定性
DATEPART DATEPART ( datepart, date ) 傳回一個整數,代表指定 date 的指定 datepart int 不具決定性
DATETRUNC DATETRUNC ( datepart, date ) 傳回截斷至指定 datepart 的輸入 date 傳回型別取決於提供給 date 的引數。 不具決定性
DAY DAY ( date ) 傳回一個整數,代表指定 date 的日 (Day) 部分。 int 具決定性
MONTH MONTH ( date ) 傳回一個整數,代表指定 date 的月 (Month) 部分。 int 具決定性
YEAR YEAR ( date ) 傳回一個整數,代表指定 date 的年 (Year) 部分。 int 具決定性

傳回日期和時間部分中日期和時間值的函數

函數 Syntax 傳回值 傳回資料類型 決定性
DATEFROMPARTS DATEFROMPARTS ( year, month, day ) 傳回指定之年、月、日的 date 值。 date 具決定性
DATETIME2FROMPARTS DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision) 以指定的精確度傳回指定日期與時間的 datetime2 值。 datetime2(precision) 具決定性
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds) 傳回指定日期和時間的 datetime 值。 datetime 具決定性
DATETIMEOFFSETFROMPARTS DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision) 以指定的時差和精確度傳回指定日期和時間的 datetimeoffset 值。 datetimeoffset(precision) 具決定性
SMALLDATETIMEFROMPARTS SMALLDATETIMEFROMPARTS ( year, month, day, hour, minute ) 傳回指定日期和時間的 smlldatetime 值。 smalldatetime 具決定性
TIMEFROMPARTS TIMEFROMPARTS ( hour, minute, seconds, fractions, precision ) 以指定的精確度傳回指定時間的 time 值。 time(precision) 具決定性

傳回日期和時間差異值的函數

函數 Syntax 傳回值 傳回資料類型 決定性
DATEDIFF DATEDIFF ( datepart, startdate, enddate ) 傳回跨越兩個指定日期的日期或時間 datepart 界限數字。 int 具決定性
DATEDIFF_BIG DATEDIFF_BIG ( datepart, startdate, enddate ) 傳回跨越兩個指定日期的日期或時間 datepart 界限數字。 bigint 具決定性

修改日期和時間值的函數

函數 Syntax 傳回值 傳回資料類型 決定性
DATEADD DATEADD (datepart, number, date ) 透過在指定 date 的指定 datepart 中新增間隔,傳回新的 datetime 值。 date 引數的資料類型 具決定性
EOMONTH EOMONTH ( start_date [, month_to_add ] ) 以選擇性位移,傳回包含指定日期的當月最後一天。 傳回類型是 start_date 引數的類型,或者是 date 資料類型。 具決定性
SWITCHOFFSET SWITCHOFFSET (DATETIMEOFFSET, time_zone) SWITCHOFFSET 會變更 DATETIMEOFFSET 值的時區時差,並保留 UTC 值。 具有 DATETIMEOFFSET 之毫秒精確度的 datetimeoffset 具決定性
TODATETIMEOFFSET TODATETIMEOFFSET (expression, time_zone) TODATETIMEOFFSET 會將 datetime2 值轉換成 datetimeoffset 值。 TODATETIMEOFFSET 會針對指定的 time_zone 以當地時間解譯 datetime2 值。 具有 datetime 引數之毫秒精確度的 datetimeoffset 具決定性

設定或傳回工作階段格式函數的函數

函數 Syntax 傳回值 傳回資料類型 決定性
@@DATEFIRST @@DATEFIRST 傳回 SET DATEFIRST 之工作階段的目前值。 tinyint 不具決定性
SET DATEFIRST SET DATEFIRST { number | @number_var } 將一週的第一天設為 1-7 其中一個數字。 不適用 不適用
SET DATEFORMAT SET DATEFORMAT { format | @format_var } 設定輸入 datetimesmalldatetime 資料時,日期部分 (月/日/年) 的順序。 不適用 不適用
@@LANGUAGE @@LANGUAGE 傳回目前使用中的語言名稱。 @@LANGUAGE 不是日期或時間函數。 不過,語言設定可能會影響日期函數的輸出。 不適用 不適用
SET LANGUAGE SET LANGUAGE { [ N ] 'language' | @language_var } 設定工作階段和系統訊息的語言環境。 SET LANGUAGE 不是日期或時間函數。 不過,語言設定會影響日期函數的輸出。 不適用 不適用
sp_helplanguage sp_helplanguage [ [ @language = ] 'language' ] 傳回所有支援語言之日期格式的詳細資訊。 sp_helplanguage 不是日期或時間預存程序。 不過,語言設定會影響日期函數的輸出。 不適用 不適用

驗證日期和時間值的函數

函數 Syntax 傳回值 傳回資料類型 決定性
ISDATE ISDATE ( expression ) 判斷 datetimesmalldatetime 輸入運算式是否具有有效的日期或時間值。 int 只有在搭配 CONVERT 函數使用、已指定 CONVERT 樣式參數,而且樣式不等於 0、100、9 或 109 時,ISDATE 才具有決定性。

與日期和時間相關的文章

發行項 描述
FORMAT 傳回以指定格式與選擇性文化特性所格式化的值。 將 FORMAT 函數用於將日期/時間與數值視為字串的地區設定感知格式化作業。
CAST 和 CONVERT (Transact-SQL) 提供將日期和時間值在字串常值與其他日期和時間格式之間來回轉換的相關資訊。
撰寫國際通用的 Transact-SQL 陳述式 提供一些指導方針,讓使用 Transact-SQL 陳述式的資料庫與資料庫應用程式能從某種語言移植至另一種語言,或可支援多種語言。
ODBC 純量函數 (Transact-SQL) 提供可用於 Transact-SQL 陳述式之 ODBC 純量函式的相關資訊。 這包括 ODBC 日期和時間函式。
AT TIME ZONE (Transact-SQL) 提供時區轉換。

請參閱