本文目錄列表: 1、SQL Server中的基準日期 2、smalldatetime的日期範圍 3、smalldatetime的日期範圍和無符號2位元組整數的關係 4、總結語 5、參考清單列表 SQL Server中的基準日期 SQL Server 中針對datetime和smalldatetime這
本文目錄列表: 1、SQL Server中的基準日期 2、smalldatetime的日期範圍 3、smalldatetime的日期範圍和無符號2位元組整數的關係 4、總結語 5、參考清單列表 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做起點映射,當然也可以選擇其他的日期,當然也考慮相應的日期時間數據類型的範圍的。 參考清單列表
1、https://technet.microsoft.com/zh-cn/library/ms187819(v=sql.90).aspx 2、http://www.cnblogs.com/dzy863/p/5080832.html