SQL Server 2008 和毫秒
Posted
技术标签:
【中文标题】SQL Server 2008 和毫秒【英文标题】:SQL Server 2008 and milliseconds 【发布时间】:2011-11-16 15:16:35 【问题描述】:在 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)
【问题讨论】:
【参考方案1】:SQL Server 中 DateTime 的精度一直为 1/300 秒 (3.33ms),因此任何不精确除的值都会被四舍五入。
997 保持原样 998 将舍入为 997 999 将四舍五入到 000为了获得更高的准确性,SQL Server 2008 及更高版本中提供了 DateTime2 数据类型,可以精确到小数点后 7 位。
【讨论】:
【参考方案2】:日期时间的 MSDN 文档http://msdn.microsoft.com/en-us/library/ms187819.aspxsay
时间范围 == 00:00:00 到 23:59:59.997 准确度 == 以 0.000、0.003 或 0.007 秒为增量进行舍入
在链接的文档中还有一节“日期时间小数秒精度的舍入”。
datetime2
为您提供更高的准确性。
【讨论】:
以上是关于SQL Server 2008 和毫秒的主要内容,如果未能解决你的问题,请参考以下文章
四舍五入 .NET DateTime 毫秒,因此它可以适应 SQL Server 毫秒
如何以毫秒的时间在 SQL Server 中打印 GETDATE()?
在sqlserver2008用sql监视器 怎么监视客户端应用程序的sql语句
SQL Server 和 C# 中 DateTime 的毫秒数不相同
如何使用 Delphi 7 ADOQuery.ExecSQL 在 SQL Server 上更新 DateTime,保留毫秒?