13

SQL Server 2008で、次のクエリが同じ値を返すのはなぜですか?

-- These all return 2011-01-01 23:59:59.997
SELECT CAST('2011-01-01 23:59:59.997' as datetime)
SELECT CAST('2011-01-01 23:59:59.998' as datetime)

そして、なぜ次のクエリは翌日に丸められるのですか?

-- Returns 2011-01-02 00:00:00.000
SELECT CAST('2011-01-01 23:59:59.999' as datetime)
4

2 に答える 2

29

SQL Server内のDateTimeの精度は、常に1/300秒(3.33ms)であるため、正確に除算されない値は丸められます。

  • 997はそのままです
  • 998は997に丸められます
  • 999は000に切り上げられます

精度を高めるために、SQL Server 2008以降で使用可能なDateTime2データ型があり、小数点以下7桁まで正確にすることができます。

于 2011-11-16T15:19:50.733 に答える
4

http://msdn.microsoft.com/en-us/library/ms187819.aspxにある日時のMSDNドキュメントによると

時間範囲==00:00:00から23:59:59.997精度== .000、.003、または.007秒の増分に丸められます

リンクされたドキュメントには、「日時の小数秒精度の丸め」のセクションもあります。

datetime2より正確になります。

于 2011-11-16T15:22:02.337 に答える