SQL Server中的奇怪的datetime行为 [英] Strange datetime behavior in SQL Server

查看:135
本文介绍了SQL Server中的奇怪的datetime行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select @data  

结果是:

 2011-01-02 00:00:00.000

第二个例子:

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select 1 where @data >= '2011-01-02 00:00:00:000'

result

 1

我的问题是为什么和如何使其正确?

My question is why and how to make it correct?

问题是在sql server 2008

problem is in sql server 2008

推荐答案

你有精度问题。 .999被四舍五入为.000。

You have a precision problem. .999 is rounded up to .000.

.997如第二天那样可以得到。

.997 is as close to the next day as you can get.

declare @data datetime
set @data = '2011-01-01T23:59:59.997'
select @data  

看看这里关于圆角的datetime小数秒精度一节
http://msdn.microsoft.com/en-us/library/ms187819.aspx

Have a look here at the section about "Rounding of datetime Fractional Second Precision" http://msdn.microsoft.com/en-us/library/ms187819.aspx

如果您在SQL Server 2008上,可以使用 datetime2(3),如果您希望精度低于毫秒。

If you are on SQL Server 2008 you can use datetime2(3) if you want a precision down to the millisecond.

这篇关于SQL Server中的奇怪的datetime行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆