日期和時間資料類型與函數 (Transact-SQL)
本主題中的下列各節會提供所有 Transact-SQL 日期和時間資料類型與函數的概觀。
日期和時間資料類型
日期和時間函數
取得系統日期和時間值的函數
取得日期和時間部分的函數
從各自部分取得日期和時間值的函數
取得日期和時間差異的函數
修改日期和時間值的函數
設定或取得工作階段格式函數的函數
驗證日期和時間值的函數
與日期和時間相關的主題
日期和時間資料類型
Transact-SQL 日期和時間資料類型會列在下表中。
資料類型 |
格式 |
範圍 |
精確度 |
儲存體大小 (位元組) |
使用者自訂的有效秒數小數位數 |
時區位移 |
---|---|---|---|---|---|---|
hh:mm:ss[. nnnnnnn] |
00:00:00.0000000 到 23:59:59.9999999 |
100 奈秒 |
3 到 5 |
是 |
否 |
|
YYYY-MM-DD |
0001-01-01 到 9999-12-31 |
1 日 |
3 |
否 |
否 |
|
YYYY-MM-DD hh:mm:ss |
1900-01-01 到 2079-06-06 |
1 分鐘 |
4 |
否 |
否 |
|
YYYY-MM-DD hh:mm:ss[. nnn] |
1753-01-01 到 9999-12-31 |
0.00333 秒鐘 |
8 |
否 |
否 |
|
YYYY-MM-DD hh:mm:ss[. nnnnnnn] |
0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999 |
100 奈秒 |
6 到 8 |
是 |
否 |
|
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 日期和時間函數會列在下表中。 如需有關決定性的詳細資訊,請參閱<決定性與非決定性函數>。
取得系統日期和時間值的函數
所有系統日期和時間值都是衍生自執行 SQL Server 執行個體之電腦的作業系統。
較高精確度的系統日期和時間函數
SQL Server 2014 會使用 GetSystemTimeAsFileTime() Windows API 來取得日期和時間值。 精確度取決於執行 SQL Server 執行個體的電腦硬體和 Windows 版本。 此 API 的精確度是固定於 100 奈秒。 精確度可藉由使用 GetSystemTimeAdjustment() Windows API 來判斷。
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
SYSDATETIME () |
傳回 datetime2(7) 值,此值包含 SQL Server 執行個體執行所在之電腦的日期和時間。 時區位移並不包括在內。 |
datetime2(7) |
不具決定性 |
|
SYSDATETIMEOFFSET ( ) |
傳回 datetimeoffset(7) 值,此值包含其上執行 SQL Server 執行個體之電腦的日期和時間。 時區位移包括在內。 |
datetimeoffset(7) |
不具決定性 |
|
SYSUTCDATETIME ( ) |
傳回 datetime2(7) 值,此值包含其上執行 SQL Server 執行個體之電腦的日期和時間。 日期和時間是以國際標準時間 (Coordinated Universal Time,UTC) 傳回。 |
datetime2(7) |
不具決定性 |
較低精確度的系統日期和時間函數
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
CURRENT_TIMESTAMP |
傳回 datetime 值,此值包含其上執行 SQL Server 執行個體之電腦的日期和時間。 時區位移並不包括在內。 |
datetime |
不具決定性 |
|
GETDATE ( ) |
傳回 datetime 值,此值包含其上執行 SQL Server 執行個體之電腦的日期和時間。 時區位移並不包括在內。 |
datetime |
不具決定性 |
|
GETUTCDATE ( ) |
傳回 datetime 值,此值包含其上執行 SQL Server 執行個體之電腦的日期和時間。 日期和時間是以國際標準時間 (Coordinated Universal Time,UTC) 傳回。 |
datetime |
不具決定性 |
取得日期和時間部分的函數
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
DATENAME ( datepart , date ) |
傳回代表指定日期之指定 datepart 的字元字串。 |
nvarchar |
不具決定性 |
|
DATEPART ( datepart , date ) |
傳回代表指定 date 之指定 datepart 的整數。 |
int |
不具決定性 |
|
DAY ( date ) |
傳回代表指定 date 之日期部分的整數。 |
int |
具決定性 |
|
MONTH ( date ) |
傳回代表指定 date 之月份部分的整數。 |
int |
具決定性 |
|
YEAR ( date ) |
傳回代表指定 date 之年份部分的整數。 |
int |
具決定性 |
從各自部分取得日期和時間值的函數
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
DATEFROMPARTS ( year, month, day ) |
傳回指定之年、月、日的 date 值。 |
date |
具決定性 |
|
DATETIME2FROMPARTS ( year、 month、 day、hour、minute、 seconds、 fractions、 precision ) |
以指定的精確度傳回指定日期與時間的 datetime2 值。 |
datetime2 ( precision ) |
具決定性 |
|
DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds ) |
傳回指定日期和時間的 datetime 值。 |
datetime |
具決定性 |
|
DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision ) |
傳回包含指定時差和精確度之指定日期和時間的 datetimeoffset 值。 |
datetime ( precision ) |
具決定性 |
|
SMALLDATETIMEFROMPARTS ( year, month, day, hour, minute ) |
傳回指定日期和時間的 smalldatetime 值。 |
smalldatetime |
具決定性 |
|
TIMEFROMPARTS ( hour, minute, seconds, fractions, precision ) |
傳回包含指定精確度之指定時間的 time 值。 |
time ( precision ) |
具決定性 |
取得日期和時間差異的函數
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
DATEDIFF ( datepart , startdate , enddate ) |
傳回跨越兩個指定日期的日期或時間 datepart 界限數字。 |
int |
具決定性 |
修改日期和時間值的函數
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
DATEADD (datepart , number , date ) |
透過在指定 date 的指定 datepart 中加入間隔,傳回新的 datetime 值。 |
date 引數的資料類型。 |
具決定性 |
|
EOMONTH ( start_date [, month_to_add ] ) |
以選擇性位移,傳回包含指定日期的當月最後一天。 |
傳回類型是 start_date 類型,或是 datetime2(7) 類型。 |
具決定性 |
|
SWITCHOFFSET (DATETIMEOFFSET , time_zone) |
SWITCHOFFSET 會變更 DATETIMEOFFSET 值的時區位移,並保留 UTC 值。 |
datetimeoffset 以及DATETIMEOFFSET |
具決定性 |
|
TODATETIMEOFFSET (expression , time_zone) |
TODATETIMEOFFSET 會將 datetime2 值轉換成 datetimeoffset 值。 datetime2 值會針對指定的 time_zone 以當地時間解譯。 |
datetimeoffset 以及 datetime 引數的小數有效位數 |
具決定性 |
設定或取得工作階段格式的函數
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
@@DATEFIRST |
傳回 SET DATEFIRST 之工作階段的目前值。 |
tinyint |
不具決定性 |
|
SET DATEFIRST { number |@number_var } |
將一週的第一天設為 1-7 其中一個數字。 |
不適用 |
不適用 |
|
SET DATEFORMAT { format |@format_var } |
設定輸入 datetime 或 smalldatetime 資料時,日期部分 (月份/日期/年份) 的順序。 |
不適用 |
不適用 |
|
@@LANGUAGE |
傳回目前所用語言的名稱。 @@LANGUAGE 不是日期或時間函數。 不過,語言設定可能會影響日期函數的輸出。 |
不適用 |
不適用 |
|
SET LANGUAGE { [ N ] 'language' |@language_var } |
設定工作階段和系統訊息的語言環境。 SET LANGUAGE 不是日期或時間函數。 不過,語言設定會影響日期函數的輸出。 |
不適用 |
不適用 |
|
sp_helplanguage [ [ @language = ] 'language' ] |
傳回所有支援語言之日期格式的詳細資訊。 sp_helplanguage 不是日期或時間預存程序。 不過,語言設定會影響日期函數的輸出。 |
不適用 |
不適用 |
驗證日期和時間值的函數
函數 |
語法 |
傳回值 |
傳回資料類型 |
決定性 |
---|---|---|---|---|
ISDATE ( expression ) |
判斷 datetime 或 smalldatetime 輸入運算式是否為有效的日期或時間值。 |
int |
只有在搭配 CONVERT 函數使用、已指定 CONVERT 樣式參數,而且樣式不等於 0、100、9 或 109 時,ISDATE 才具有決定性。 |
與日期和時間相關的主題
主題 |
說明 |
---|---|
提供將日期和時間值在字串常值與其他日期和時間格式之間來回轉換的相關資訊。 |
|
提供一些指導方針,讓使用 Transact-SQL 陳述式的資料庫與資料庫應用程式能從某個語言移植至另一個語言,或可支援多種語言。 |
|
提供可用於 Transact-SQL 陳述式之 ODBC 純量函數的相關資訊。 這包括 ODBC 日期和時間函數。 |