我希望结果总是1:
DECLARE @x datetime2
SELECT @x=GETDATE()
SELECT CASE WHEN @x>GETDATE() THEN 0 ELSE 1 END
Run Code Online (Sandbox Code Playgroud)
但它有时是1,有时是0.这怎么可能?
Joe*_*orn 10
代码执行需要时间.有时在第二和第三行之间发生嘀嗒,有时(通常)没有.在后一种情况下(没有勾号),@x仍然等于(不大于)GETDATE()第三行中的值,并最终得到0.一开始让我感到惊讶的是你看到的1.当确实发生滴答时,@x现在应该小于GETDATE()第3行中的新值,你仍然会看到0.
但是在运行此代码时更有意义:
DECLARE @x datetime2
SELECT @x=GETDATE()
SELECT @x, GETDATE(), CASE WHEN @x>GETDATE() THEN 0 ELSE 1 END
Run Code Online (Sandbox Code Playgroud)
现在我们可以看到更好的情况.这是我机器上的示例结果:
2018-01-19 23:32:21.3833333 | 2018-01-19 23:32:21.383 | 1
Run Code Online (Sandbox Code Playgroud)
唉唉...... @x是datetime2比旧的更精确datetime的使用GETDATE().你可以在GETDATE()的文档中看到它确实返回datetime而不是datetime2.所以我们在两个值之间发生了一些舍入误差.
对于0价值观,我跑了改变码30或40次(命中为刷新F5),和所有的的0的,我看到是这样的:
2018-01-19 23:36:29.0366667 | 2018-01-19 23:36:29.037 | 0
Run Code Online (Sandbox Code Playgroud)
第二列中的最后一位数字为7,第一列重复6位,末尾为圆形7.
有一件事让我感到困惑.该GETDATE()函数返回一个datetime值,但它以某种方式分配datetime2精度@x.我希望看到额外的零,总是与原始GETDATE()结果相匹配.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |