【MSSQL】SQL Server的日期和時間類型


參考:SQL Server的日期和時間類型

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM