我希望结果总是1:
DECLARE @x datetime2
SELECT @x=GETDATE()
SELECT CASE WHEN @x>GETDATE() THEN 0 ELSE 1 END
但它有时是1,有时是0。 怎么可能?
答案 0 :(得分:10)
执行代码需要时间。有时在第二和第三行之间发生嘀嗒,有时(通常)没有。在后一种情况下(无勾号),-ar 48000 -ac 2
仍然等于(不大于)第三行中的@x
值,最后得到GETDATE()
。一开始让我感到惊讶的是你见过0
。当确实发生勾选时,1
现在应该小于第3行中的新@x
值,您仍然会看到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
使用的旧版datetime
。您可以在documentation for GETDATE()中看到它确实返回GETDATE()
而不是datetime
。所以我们在这两个值之间会出现一些舍入错误。
对于datetime2
值,我将更改的代码运行了30或40次(按F5进行刷新),并且0
的全部我看到了这样:
0
第二列中的最后一位数字为7,第一列重复6位,末尾为圆形7位。
有一件事让我感到困惑。 2018-01-19 23:36:29.0366667 | 2018-01-19 23:36:29.037 | 0
函数返回GETDATE()
值,但不知何故,它会将datetime
精度赋给datetime2
。我希望看到额外的零,它始终与原始@x
结果匹配。