一、日期類型:
對于SQL Server 2008 來說(因為2000甚至2005已經稍微有被淘汰的跡象,所以在此不作過多說明,加上自己工作使用的是2008R2。所以不保證08以前的能用),日期類型有:
數據類型
格式
范圍
精確度
存儲大小(以字節為單位)
用戶定義的秒的小數精度
時區偏移量
time
hh:mm:ss[.
nnnnnnn]
00:00:00.0000000 到 23:59:59.9999999
100 納秒
3 到 5
是
否
date
YYYY-MM-DD
0001-01-01 到 9999-12-31
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
有
有
注意:所有系統日期和時間值均得自運行 SQL Server 實例的計算機的操作系統。
每一種日期類型有其使用范圍,當然以剛好適用為最佳選擇,切記不要為了方便,什么都用datetime類型。從性能方面會有很大影響,舉個例子:
一個表,有1億行的數據,有10列日期型(對于一些歷史表來說這是完全有可能的)。如果全部使用datetime,那么光這部分的存儲空間就是:10*100000000*8字節/(1024*1024)≈7629M≈7.4G,當然,如果有這樣的需要,再大也還是要用的,假設其實業務上不需要那么精確(因為datetime是精確到0.00333秒),只需要精確到1分鐘即可,那么毫不猶豫使用smalldatetime,可以減少一半的空間,也就是大約3.7G。減少空間的好處有很多,比如備份及數據庫文件的大小可以減少,讓有限的預算做更多的事情。而且數據頁固定8KB,越少的體積單頁能存放的數據也就越多,查詢時要訪問的頁面就更少,緩解I/O壓力。同時對索引的使用也更有效,等等。
所以這里就能體現出“設計”的重要性。
二、日期函數:日期函數是處理日期的基礎,牢記日期函數能減少很多編程工作
精度較高的系統日期和時間函數
精確程度取決于運行 SQL Server 實例的計算機硬件和 Windows 版本。標注有:2012有效的是只有2012才出現的功能
函數
語法
返回值
返回數據類型
確定性
SYSDATETIME
SYSDATETIME ()
返回包含計算機的日期和時間的 datetime2(7) 值,SQL Server 的實例正在該計算機上運行。
時區偏移量未包含在內。
datetime2(7)
不具有確定性
SYSDATETIMEOFFSET
SYSDATETIMEOFFSET ( )
返回包含計算機的日期和時間的 datetimeoffset(7) 值,SQL Server 的實例正在該計算機上運行。
時區偏移量包含在內。
datetimeoffset(7)
不具有確定性
SYSUTCDATETIME
SYSUTCDATETIME ( )
返回包含計算機的日期和時間的 datetime2(7) 值,SQL Server 的實例正在該計算機上運行。
日期和時間作為 UTC 時間(通用協調時間)返回。
datetime2(7)
不具有確定性
精度較低的系統日期和時間函數
函數
語法
返回值
返回數據類型
確定性
新聞熱點
疑難解答