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 的毫秒数不相同

如何使用过滤器和分页优化 SQL Server 查询?

如何使用 Delphi 7 ADOQuery.ExecSQL 在 SQL Server 上更新 DateTime,保留毫秒?