SQL Server使用 Date 表示日期,time表示時間,使用datetime和datetime2表示日期和時間。
1、秒的精度
秒的精度是指TSQL使用多少位小數,DateTime數據類型秒的精度是3,DateTime2和Time可以控制秒的精度,語法是DateTime2(n)和time(n),n的取值范圍是0-7,默認值是7。
2、DateTime
DateTime數據類型存儲日期和時間,需要8個字節的固定存儲空間,默認的數據格式是yyyy-MM-dd hh:mm:ss.xxx,表示從1753年1月1日到9999年12月31日的日期和時間數據,精確度為3.33毫秒或0.00333秒,即可以表示的日期范圍從公元1753年1月1日00:00:00.000 到9999年12月31日23:59:59.997 ,精確到3.33毫秒。
Microsoft SQL Server 用兩個 4 字節的整數內部存儲 datetime 數據類型的值。第一個 4 字節存儲 base date (即 1900 年 1 月 1 日)之前或之后的天數。基礎日期是系統參考日期。不允許早於 1753 年 1 月 1 日的 datetime 值。第一個4 字節:1900 年1 月1 日當日為0 ;之前的日期是負數,之后日期是正數。另外一個 4 字節存儲以10/3 毫秒數所代表的每天的時間。
select CAST(0 as datetime) select CAST(1 as datetime) select CAST(31 as datetime) select CAST(365 as datetime)

使用GetDate()和GetUTCDate()為DateTime類型的變量賦值,這兩個函數返回值的類型是DateTime

3、DateTime2
DateTime2數據類型 存儲日期和時間,需要的存儲空間不固定。根據存儲的時間部分 fractional seconds precision來確定DateTime2的Storage Size,6 bytes for precisions less than 3; 7 bytes for precisions 3 and 4. All other precisions require 8 bytes.
DateTime2可以表示比DateTime更精確的時間,默認的數據格式是yyyy-MM-dd hh:mm:ss.nnnnnnn,DateTime2 秒默認的精度是7,即用7位小數表示一秒的精度。表示從0000年1月1日到9999年12月31日的日期和時間數據。
DateTime2的語法是:
datetime2 [ (fractional seconds precision) ]

為DateTime2類型的變量賦值,需要使用SysDateTime()和SysUTCDateTime(),這兩個函數返回值的類型是DateTime2(7)。

4、Date
Date數據類型只存儲日期,不存儲時間,需要3B的存儲空間,默認的數據格式是yyyy-MM-dd,支持的日期范圍從0001-01-01到9999-12-31
可以使用日期字符串,getdate()函數和sysdatetime()函數為Date類型的變量賦值。

5、Time
Time數據類型 只存儲時間,不存儲日期,需要5B的存儲空間.
Time默認的fractional second precision是7,默認的數據格式是hh:mm:ss.nnnnnnn。
Time數據類型的語法:
time [ (fractional second precision) ]
推薦使用時間字符串和sysdatetime()函數為Time類型的變量賦值。不推薦使用GetDate()函數,GetDate()函數返回的是DateTime類型,時間部分的fractional second precision沒有time類型高,如果對時間的precision要求高,請使用時間字符串和sysdatetime()函數為Time類型的變量賦值。

7、查看變量占用的字節數
DataLength能過返回任意數據類型的變量所占用的字節數量,從下圖中,可以看到,datetime占用的存儲空間太大,精度不高,datetime2完勝datetime,在產品環境中,推薦使用datetime2
declare @dt1 datetime declare @dt2 datetime2(2) declare @dt3 datetime2(4) set @dt1=getdate() set @dt2=getdate() set @dt3=SYSDATETIME() select DATALENGTH(@dt1),DATALENGTH(@dt2),DATALENGTH(@dt3),@dt1,@dt2,@dt3

如果對time的要求不是很高,保留2位毫秒,使用datetime2(2),比其他類型節省存儲空間。
8、datetime與datetime2 tips







