我正在嘗試將以下內容DATETIME轉換為DATETIME2:
DECLARE @x DATETIME = '2021-12-10 19:58:41.333'
SELECT CAST(@x AS DATETIME2)
結果是2021-12-10 19:58:41.3333333。為什么演員表加 0.0003333s?
uj5u.com熱心網友回復:
與某些人的理解相反,datetime不精確到 1/1000 秒,它精確到1/300秒。這就是為什么 a 的最后一個數字datetime總是0、3或7,因為它們分別代表 0/300、1/300 和 2/300 秒(3/300 將0再次出現)。
但是,對于datetime2,資料型別的精度可以是0- 7。0意思是精確到 1 秒,并且7是 100 納秒或 1/10 微秒。
當您將 a 轉換datetime為 a時,僅精確到 1/300 秒datetime2的事實會反映在轉換后的值中(請注意,對于舊版本的 SQL Server,這是不正確的),因此會將 1/300 顯示為datetime新的準確度。
讓我們取你所擁有的價值2021-12-10 19:58:41.333。這里.333是無限的,更多的是.3333333333~。這是因為您不能用以 10 為底的數字準確地表示 1/3(或 1/300)。然后,您將 ( CAST) 您的值轉換為 a datetime2。您省略了精度,因此默認為7. 這給了你2021-12-10T19:58:41.3333333,因為現在顯示 1/300 的精度高達 7(請注意,上面的精度是 100 納秒,而不是100/3 納秒)。
如果你有時間喜歡2021-12-10 19:58:41.357并將其轉換為datetime2(4)你會得到的2021-12-10 19:58:41.3567。如果您隨后將其轉換為 adatetime2(7)您將得到2021-12-10 19:58:41.3567000,因為在將其轉換為 a 時會丟失“1/300th-ness”精度datetime2(4)。
正如所提到的,在舊版本的 SQL Server(如果我沒記錯的話,是 2014 年之前)中,上述情況不正確。在這些舊版本中,將datetimevalue轉換為value2021-12-10 19:58:41.333的準確度會降低。如果您使用的是舊版本并依賴此行為,則需要將您的值顯式轉換/轉換為 a以避免可能的重大更改。datetime2(7)2021-12-10 19:58:41.3330000datetimedatetime2(3)
uj5u.com熱心網友回復:
這實際上是由于DATETIME. 您會注意到毫秒中只有 3 個可能的值datetime:0,333 或 667。這是因為它的粒度是秒的三分之一。當轉換為 時datetime2,這會擴展十進制數字以正確表示分數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443769.html
上一篇:將AM/PM時間從字串轉換為時間
