将GETDATE()与SQL Server中存储的GETDATE()进行比较的结果错误
发布时间:2020-05-24 09:30:23 所属栏目:MsSql 来源:互联网
导读:我希望结果总是1: DECLARE @x datetime2SELECT @x=GETDATE()SELECT CASE WHEN @xGETDATE() THEN 0 ELSE 1 END 但它有时是1,有时是0. 怎么可能? 代码执行需要时间.有时在第二和第三行之间发生嘀嗒,有时(通常)没有.在后一种情况下(没有勾号),@ x仍然等于(不大
|
我希望结果总是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()结果. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在mac上如何使用终端打开XAMPP自带的MySQL
- sql-server – 将数组参数传递给存储过程
- sql-server – 如何在SQL Server中取消应用程序锁定请求?
- MSsql每天自动备份数据库并每天自动清除log的脚本
- sql-server – 未记录的CONVERT样式 – datetime 23
- sql-server – 如何知道何时/是否有太多索引?
- 如何在SQL 2000/2005中执行区分大小写的搜索和替换?
- sql – 可变长度的子字符串
- SQL2005学习笔记 EXCEPT和INTERSECT运算符
- SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法
