SQLSERVER 中datetime 和 smalldatetime類型剖析解釋。本站提示廣大學習愛好者:(SQLSERVER 中datetime 和 smalldatetime類型剖析解釋)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLSERVER 中datetime 和 smalldatetime類型剖析解釋正文
datetime 和 smalldatetime
代表日期和一天內的時光的日期和時光數據類型。
Microsoft SQL Server 用兩個 4 字節的整數外部存儲 datetime 數據類型的值。第一個 4 字節存儲 base date (即 1900 年 1 月 1 日)之前或以後的天數。基本日期是體系參考日期。不許可早於 1753 年 1 月 1 日的 datetime 值。第一個4 字節:1900 年1 月1 日當日為0 ;之前的日期是正數;以後日期是負數。別的一個 4 字節存儲以午夜後3 1/3 毫秒數所代表的天天的時光。
smalldatetime 數據類型存儲日期和天天的時光,但准確度低於 datetime 。 SQL Server 將 smalldatetime 的值存儲為兩個 2 字節的整數。第一個 2 字節存儲 1900 年 1 月 1 往後的天數。別的一個 2 字節存儲午夜後的分鐘數。日期規模從1900 年 1 月 1 日到 2079 年 6 月 6 日,准確到分鐘。
可以將這兩品種型轉換成float 浮點數, 個中整數部門就是對應的日期字節, 而小數部門是時光響應的比例, 如datetime 的小數部門就是占成天的毫秒數的比例;smalldatetime 的小數部門就是占成天的分鐘數的比例. 是以我們可以直接將這兩品種型的變量和整數、浮點數停止直接的加減。
datetime
從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時光數據,准確度為百分之三秒(等於 3.33 毫秒或 0.00333 秒)。以下表所示,把值調劑到 .000 、.003 、或 .007 秒的增量。
示例
調劑後的示例
01/01/98 23:59:59.999
1998-01-02 00:00:00.000
01/01/98 23:59:59.995,
01/01/98 23:59:59.996,
01/01/98 23:59:59.997, 或
01/01/98 23:59:59.998
1998-01-01 23:59:59.997
01/01/98 23:59:59.992,
01/01/98 23:59:59.993,
01/01/98 23:59:59.994
1998-01-01 23:59:59.993
01/01/98 23:59:59.990 或
01/01/98 23:59:59.991
1998-01-01 23:59:59.990
我們經常須要搜刮指定日期規模內的數據, 好比前往1998-01-01 當天內的數據, 你能夠會如許寫:
date >= ‘1998-01-01 00:00:00.000' and date <= ‘1998-01-01 23:59:59.999 '
依據下面的調劑規矩, 其實這句語句的現實搜刮規模為:
date >= ‘1998-01-01 00:00:00.000' and date <= ‘1998-01-02 00:00:00.000 '
你會看到這包含了1998-01-02 的數據, 所以最好的准確的搜刮語句為:
date >= ‘1998-01-01 00:00:00.000' and date < ‘1998-01-02 00:00:00.000 '
smalldatetime
從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時光數據准確到分鐘。29.998 秒或更低的 smalldatetime 值向下捨入為最接近的分鐘,29.999 秒或更高的 smalldatetime 值向上捨入為最接近的分鐘。
--returns time as 12:35
SELECT CAST('2000-05-08 12:35:29.998' AS smalldatetime)
GO
--returns time as 12:36
SELECT CAST('2000-05-08 12:35:29.999' AS smalldatetime)
GO
賦值:
下面說了時光的現實格局,我們在給一個時光變量賦值時確定不會賦一個浮點數給該變量,更多的情形是我們給這個變量賦一個字符串,體系會主動將字符串釀成時光格局並保留到數據庫中。若字符格局毛病,則報錯。依據說話分歧,世界上有多種分歧的用字符串表現時光方法,我們可以經由過程 sp_helplanguage 檢查分歧說話下的缺省時光格局,如簡體中文的時光格局為 ymd ,可以經由過程 SET DATEFORMAT 來臨時更改這個缺省值。
時光函數
DATEADD :可以對時光類型的指定部門停止加減盤算,固然我們下面說了可以停止直接的加減,然則我們可以更便利的應用這個函數對指定部門,如年代日時分秒等停止加減。我們經常依據一個時光來結構出別的一個時光,好比下個月的明天 , 本月底等等,我們應當也盡可能應用 DATEADD 函數來結構,它可以免一些閏月、歲尾、月底之類的毛病,我之前就是依據 DATENAME 來結構的,經常要斟酌這些成績。
DATEDIFF :該函數對兩個時光變量對指定部門停止比擬盤算。此函數不斟酌比指定日期部門更高的粒度級別,它只斟酌更初級其余部門。對時光的比擬應盡可能應用本函數。
舉個失足的例子:前往兩個時光變量的小時差。若應用 DATEPART(HOUR, @T2 - @T1) 便可能會失足;你應當應用 DATEDIFF(HOUR, @T1, @T2) 。
DATEPART :前往時光變量的指定部門的值。
DATENAME :前往時光變量的指定部門的值,和 DATAPART 分歧的是本函數前往的是個字符串類型
GETDATE() 前往本機械確當前時光。 CURRENT_TIMESTAMP 變量與本函數功效雷同。
GETUTCDATE() 前往本機械確當前 UTC (格林尼治本准時光)時光。