SQL Server中smalldatetime的日期范圍為何是[1900-01-01,2079-06-06]


本文目錄列表:
 
SQL Server中的基准日期
 
SQL Server 中針對datetime和smalldatetime這兩個日期時間數據類型提供一個基准日期,也就是1900-01-01。
以下摘錄自MSDN

SQL Server 2005 數據庫引擎用兩個 4 字節的整數內部存儲 datetime 數據類型的值。第一個 4 字節存儲“基礎日期”(即 1900 年 1 月 1 日)之前或之后的天數。基礎日期是系統參照日期。另外一個 4 字節存儲天的時間,以午夜后經過的 1/300 秒數表示。

smalldatetime 數據類型存儲天的日期和時間,但精確度低於 datetime。數據庫引擎將 smalldatetime 值存儲為兩個 2 字節的整數。第一個 2 字節存儲 1900 年 1 月 1 日后的天數。另外一個 2 字節存儲午夜后經過的分鍾數。

注意:

1、以上“基礎日期”(即1900年1月1日)也就是本文要說的基准日期。

 

smalldatetime的日期范圍
smalldatetime的日期范圍 根據msdn中相關資料是[1900-01-01,2079-06-06]。
 
smalldatetime的日期范圍和無符號2字節整數的關系
 
SQL Server針對datetime和smalldatetime的數據類型的變量或字段列賦值為0或1900-01-01,其結果是相同的。
以下T-SQL代碼效果如下:
 
 
smalldatetime日期的最大值為2079-06-06,如果針對該數據的賦值為65535 (該值為 無符號2字節整數的最大值2^16-1),結果也是為2079-06-06的,以下T-SQL代碼效果如下:
 
從0對應1900-01-01,65535對應2079-06-06其對應關系,大致可以得到smalldatetime的日期范圍和無符號2字節整數的范圍正好一一對應的。可以通過T-SQL得到證明,如下:
注意:
1、中間省略了部分,僅顯示頭和尾的數據對應,中間省略。
2、函數dbo.ufn_GetNums可以參看SQL Server數字輔助表的實現
 
總結語
 
smalldatetime的日期范圍是和無符號2字節整數的范圍一一對應的。針對這種對應關系,如果數據表中的字段列為日期時間數據類型,且精度為天,就可以保存一個整數和該日期保存一種對應關系,可以參考基准日期1900-01-01做起點映射,當然也可以選擇其他的日期,當然也考慮相應的日期時間數據類型的范圍的。
 
參考清單列表


免責聲明!

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



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