以下两个逻辑条件有什么区别(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)
(是的,有区别——改变会产生不同的结果,但我看不出是什么)
背景
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 数据资源管理器中:原始和复制
不过,这些查询产生的结果略有不同......我真的很想知道为什么。我也无法确定哪个查询结果是正确的。我相信它必须归结为 datediff 逻辑中的某些东西......它是“四舍五入”小时还是什么,所以它的结果会稍微少一些?
日期差异:
日期添加: