適用於:
SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 資料庫
本文中的各節將說明所有 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 |
否 |
否 |
|
smalldatetime |
yyyy-MM-dd HH:mm:ss |
1900-01-01 到 2079-06-06 |
1 分鐘 |
4 |
否 |
否 |
|
datetime |
yyyy-MM-dd HH:mm:ss[.nnn] |
1753-01-01 到 9999-12-31 |
0.00333 秒鐘 |
8 |
否 |
否 |
|
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 |
是 |
是 |
注意
Transact-SQL rowversion 數據類型不是日期或時間數據類型。
timestamp 是 rowversion 的已取代同義字。
日期和時間函式
下表列出 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 |
不具決定性 |
|
CURRENT_DATE |
CURRENT_DATE |
傳回日期值,只包含執行 資料庫引擎 實例的計算機日期。 傳回的值不包含時間和時區位移。 |
date |
不具決定性 |
傳回日期和時間部分的函數
| 函數 |
Syntax |
傳回值 |
傳回資料類型 |
決定性 |
|
DATE_BUCKET |
DATE_BUCKET( 日期部分、 數字、 日期、 來源 ) |
從 origin 參數所定義的時間戳記 (如果未指定 origin 參數,則會從 1900-01-01 00:00:00.000 的預設原始值),傳回對應至每個日期時間值區起點的值。 |
傳回型別取決於提供給 date 的引數。 |
不具決定性 |
|
DATENAME |
DATENAME( 日期部分, 日期 ) |
傳回字元字串,代表指定日期的指定 datepart。 |
nvarchar |
不具決定性 |
|
DATEPART |
DATEPART( datepart, 日期 ) |
傳回一個整數,代表指定 date 的指定 datepart。 |
int |
不具決定性 |
|
DATETRUNC |
DATETRUNC( 日期部分, 日期 ) |
傳回截斷至指定 datepart 的輸入 date。 |
傳回型別取決於提供給 date 的引數。 |
不具決定性 |
|
DAY |
DAY( 日期 ) |
傳回一個整數,代表指定 date 的日 (Day) 部分。 |
int |
具決定性 |
|
MONTH |
月份( 日期 ) |
傳回一個整數,代表指定 date 的月 (Month) 部分。 |
int |
具決定性 |
|
YEAR |
年份( 日期 ) |
傳回一個整數,代表指定 date 的年 (Year) 部分。 |
int |
具決定性 |
傳回日期和時間部分中日期和時間值的函數
| 函數 |
Syntax |
傳回值 |
傳回資料類型 |
決定性 |
|
DATEFROMPARTS |
日期從部分( 年份、 月份、 日期 ) |
傳回指定之年、月、日的 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( 年、 月、 日、 時、 分鐘 ) |
傳回指定日期和時間的 smlldatetime 值。 |
smalldatetime |
具決定性 |
|
TIMEFROMPARTS |
TIMEFROMPARTS(小時、分鐘、秒、分數、精度) |
以指定的精確度傳回指定時間的 time 值。 |
time(precision) |
具決定性 |
傳回日期和時間差異值的函數
| 函數 |
Syntax |
傳回值 |
傳回資料類型 |
決定性 |
|
DATEDIFF |
DATEDIFF( 日期部分、 開始日期、 結束日期 ) |
傳回跨越兩個指定日期的日期或時間 datepart 界限數字。 |
int |
具決定性 |
|
DATEDIFF_BIG |
DATEDIFF_BIG( 日期部分、 開始日期、 結束日期 ) |
傳回跨越兩個指定日期的日期或時間 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 { number | @number_var } |
將一週的第一天設為 1-7 其中一個數字。 |
不適用 |
不適用 |
|
設定日期格式 |
SET DATEFORMAT { format | @format_var } |
設定輸入 datetime 或 smalldatetime 資料時,日期部分 (月/日/年) 的順序。 |
不適用 |
不適用 |
|
@@LANGUAGE |
@@LANGUAGE |
傳回目前使用中的語言名稱。 @@LANGUAGE 不是日期或時間函數。 不過,語言設定可能會影響日期函數的輸出。 |
不適用 |
不適用 |
|
集合語言 |
SET LANGUAGE { [ N ] 'language' | @language_var } |
設定工作階段和系統訊息的語言環境。 SET LANGUAGE 不是日期或時間函數。 不過,語言設定會影響日期函數的輸出。 |
不適用 |
不適用 |
|
sp_helplanguage |
sp_helplanguage [ [ @language = ] 'language' ] ] |
傳回所有支援語言之日期格式的詳細資訊。
sp_helplanguage 不是日期或時間預存程式。 不過,語言設定會影響日期函數的輸出。 |
不適用 |
不適用 |
驗證日期和時間值的函數
| 函數 |
Syntax |
傳回值 |
傳回資料類型 |
決定性 |
|
ISDATE |
ISDATE( 表達式 ) |
判斷 datetime 或 smalldatetime 輸入運算式是否具有有效的日期或時間值。 |
int |
只有在搭配 CONVERT 函數使用、已指定 CONVERT 樣式參數,而且樣式不等於 0、100、9 或 109 時,ISDATE 才具有決定性。 |
與日期和時間相關的文章
| 發行項 |
描述 |
|
FORMAT |
傳回以指定格式與選擇性文化特性所格式化的值。 將 FORMAT 函數用於將日期/時間與數值視為字串的地區設定感知格式化作業。 |
|
CAST 和 CONVERT |
提供將日期和時間值在字串常值與其他日期和時間格式之間來回轉換的相關資訊。 |
|
撰寫國際通用的 Transact-SQL 陳述式 |
提供一些指導方針,讓使用 Transact-SQL 陳述式的資料庫與資料庫應用程式能從某種語言移植至另一種語言,或可支援多種語言。 |
|
ODBC 純量函式 |
提供可用於 Transact-SQL 陳述式之 ODBC 純量函式的相關資訊。 包含 ODBC 日期和時間函式。 |
|
在時區 |
提供時區轉換。 |
相關內容