標籤:http 使用 ar strong for 資料 sp art on
微軟在備受多年的爭議後,終於對日期時間資料類型開刀了,在新版的SQL Server 2008中一口氣增加了4種新的日期時間資料類型,包括:
- Date:一個純的日期資料類型。
- Time:一個純的時間資料類型。
- DateTime2:新的日期時間類型,將精度提到到了100納秒。
- DateTimeOffset:新的日期時間類型,在DateTime2的基礎上增加了時區部分。
下面是在SQL Server 2008中日期時間資料類型的一個簡單匯總表:
資料類型 |
格式 |
取值範圍 |
精度 |
儲存尺寸 |
date |
yyyy-mm-dd |
0001-1-1 9999-12-31 |
1天 |
3位元組 |
time |
hh:mm:ss.nnnnnn |
0:0:0.000000 23:59:59.999999 |
100納秒 |
3-5位元組 |
smalldatetime |
yyyy-mm-dd hh:mm:ss |
1900-1-1 2079-6-6 |
1分鐘 |
4位元組 |
datetime |
yyyy-mm-dd hh:mm:ss:nnn |
1753-1-1 9999-12-31 |
0.00333秒 |
8位元組 |
datetime2 |
yyyy-mm-dd hh:mm:ss:nnnnnn |
0001-1-1 9999-12-31 |
100納秒 |
6-8位元組 |
datetimeoffset |
yyyy-mm-dd hh:mm:ss:nnnnnn +|- hh:mm |
0001-1-1 9999-12-31 (全球標準時間) |
100納秒 |
8-10位元組 |
為了使用這些資料類型,SQL Server 2008同時還引入了一系列的T-SQL函數。
三個用於獲得高精度系統時間的函數(因為是這三個函數都是取的作業系統時間,所以精度僅能達到10毫秒):
- SYSDATETIME:返回運行SQL Server執行個體的伺服器的本地時間,資料類型是datetime2(7),不包含時區資訊。
- SYSDATETIMEOFFSET:返回運行SQL Server執行個體的伺服器的本地時間及時區資訊,資料類型是datetimeoffset(7)。
- SYSUTCDATETIME:返回運行SQL Server執行個體的伺服器的標準世界時間,資料類型是datetime2(7)。
用於時區轉換的函數:
- SWITCHOFFSET(datetimeoffset, time_zone):根據輸入的世界時間以及時區資訊返回某個特定時區的資料,例如SWITCHOFFSET(‘2008-1-1 0:0:0 + 8:00‘, ‘-07:00‘)傳回值將是‘2007-12-31 9:00 -07:00‘,這樣我們就曉得我們元旦的時候老美的時間只是早上9:00。(有個有趣的情況是SWITCHOFFSET函數time_zone參數小時的前置0時不能省略的,就我們剛才用的那個例子如果time_zone參數寫成‘7:00‘就會報錯,必須寫成‘07:00‘,不過datetimeoffset資料裡那個時區部分小時的前置0時可以省略的,也就是說‘2008-1-1 0:0:0 + 8:00‘和‘2008-1-1 0:0:0 + 08:00‘都是可以接受的,對於時區中分鐘部分也是如此。不過建議大家養成良好的編碼習慣,所有前置0都不要省略。)
- TODATETIMEOFFSET(datetime, offset):根據輸入的日期時間參數值和時區參數值返回一個世界時間值。例如TODATETIMEOFFSET(‘2008-1-1 0:0:0‘, ‘+08:00‘)傳回值是‘2008-1-1 0:0:0 + 08:00‘。
順便列舉一下SQL Server 2005中已經提供的日期時間函數,不過就不做介紹了:
- 用於擷取系統時間的函數:CURRENT_TIMESTAMP,GETDATE,GETUTCDATE
- 返回日期時間的指定部分:DATENAME,DATEPART,DAY,MONTH,YEAR
- 計算日期時間差異的函數:DATEDIFF, DATEADD (必須注意的是datetime、smalldatetime資料類型支援+和-運算子,但是對於date、time、datetime2、datetimeoffset則不支援。)
- 對日期時間進行計算的函數:DATEADD
- 設定日期時間顯示格式的函數:@@DATEFIRST,SET DATEFIRST,SET DATEFORMAT,@@LANGUAGE,SET LANGUAGE,sp_helplanguage
- 用於確認日期時間資料格式的函數:ISDATE
SQL Server 2008對日期時間類型的改進