SQL Server 2008對日期時間型別的改進

drillchina發表於2008-01-28

微軟在備受多年的爭議後,終於對日期時間資料型別開刀了,在新版的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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9079672/viewspace-162841/,如需轉載,請註明出處,否則將追究法律責任。

相關文章