微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将GETDATE()与SQL Server中存储的GETDATE()进行比较的结果错误

我希望结果总是1:
DECLARE @x datetime2
SELECT @x=GETDATE()
SELECT CASE WHEN @x>GETDATE() THEN 0 ELSE 1 END

但它有时是1,有时是0.
怎么可能?

解决方法

代码执行需要时间.有时在第二和第三行之间发生嘀嗒,有时(通常)没有.在后一种情况下(没有勾号),@ x仍然等于(不大于)第三行中的GETDATE()值,你最终得到0.一开始让我感到惊讶的是你曾经看到过1.当勾选时确实发生了,@ x现在应该小于第3行中的新GETDATE()值,你仍然会看到0.

但是在运行此代码时更有意义:

DECLARE @x datetime2
SELECT @x=GETDATE()
SELECT @x,GETDATE(),CASE WHEN @x>GETDATE() THEN 0 ELSE 1 END

现在我们可以看到更好的情况.这是我机器上的示例结果:

2018-01-19 23:32:21.3833333   |  2018-01-19 23:32:21.383   |    1

啊…… @x是一个datetime2,其精度高于GETDATE()使用的旧日期时间.你可以在documentation for GETDATE()中看到它确实返回了datetime而不是datetime2.所以我们在两个值之间发生了一些舍入误差.

对于0值,我运行了改变的代码30或40次(按F5刷新),我看到的所有0都是这样的:

2018-01-19 23:36:29.0366667   |   2018-01-19 23:36:29.037   |   0

第二列中的最后一位数字为7,第一列重复6位,末尾为圆形7.

有一件事让我感到困惑. GETDATE()函数返回一个日期时间值,但不知何故它将datetime2精度分配给@x.我希望看到额外的零,它总是匹配原始的GETDATE()结果.

原文地址:https://www.jb51.cc/mssql/77165.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐