【发布时间】:2015-07-20 13:38:37
【问题描述】:
以下两个逻辑条件有什么区别(CreationDate的值都是DateTime)?
and abs(datediff(hour, a.CreationDate, e.CreationDate)) < 12
和:
and e.CreationDate > dateadd(hour, -12, a.CreationDate)
and e.CreationDate < dateadd(hour, 12, a.CreationDate)
(是的,有区别——改变会产生不同的结果,但我看不出是什么)
背景
最近的question came up on Meta.se 关于“策展人”徽章和 12 小时编辑窗口。这个问题启发我制作一个我之前编写的 SQL 查询的副本,并制作新的副本“可变”大小的编辑窗口,而不是每边只有 12 小时。本质上,我更改了以下代码:
and abs(datediff(hour, a.CreationDate, e.CreationDate)) < 12
成为:
and e.CreationDate > dateadd(hour, -12, a.CreationDate)
and e.CreationDate < dateadd(hour, 12, a.CreationDate)
(除了第二条语句中的12个值是变量)。
这两个查询位于 Stack Exchange 数据资源管理器中:original 和 copied
不过,查询产生的结果略有不同......我真的很想知道为什么。我也无法确定哪个查询结果是正确的。我相信它必须归结为 datediff 逻辑中的某些东西......它是“四舍五入”小时还是什么,所以它的结果会稍微少一些?
日期差异:
添加日期:
【问题讨论】:
-
您能打印出
CreationDate的值,然后按此排序,看看哪些是缺失的吗?这可能会为您提供有关正在发生的事情的线索。 -
我还刚刚运行了您的查询并从每个查询中获得了 255 行,并且前几屏结果看起来相同。
-
我链接的查询有 255 个结果,但第一条记录有 288 个问题,另一个有 287 个问题......这是 SEDE 表示层中的缓存问题,也许,@ChrisF
标签: sql-server tsql sede