首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >datediff和dateadd异常

datediff和dateadd异常
EN

Stack Overflow用户
提问于 2015-05-09 19:27:20
回答 1查看 252关注 0票数 6

以下两个逻辑条件(两个CreationDate值都是DateTime)有什么区别?

代码语言:javascript
复制
   and abs(datediff(hour, a.CreationDate, e.CreationDate)) < 12

以及:

代码语言:javascript
复制
   and e.CreationDate > dateadd(hour, -12, a.CreationDate)
   and e.CreationDate < dateadd(hour,  12, a.CreationDate)

(是的,这是有区别的-这种变化产生了不同的结果,但我看不出是什么)

背景

最近的Meta.se上出现了问题关于“馆长”徽章,和12小时编辑窗口。这个问题激励我制作我以前写过的SQL查询的副本,并使新的副本“变量”大小的编辑窗口,而不是每边只需12个小时。实际上,我更改了以下代码:

代码语言:javascript
复制
   and abs(datediff(hour, a.CreationDate, e.CreationDate)) < 12

将是:

代码语言:javascript
复制
   and e.CreationDate > dateadd(hour, -12, a.CreationDate)
   and e.CreationDate < dateadd(hour,  12, a.CreationDate)

(除了第二个语句中的12个值是变量)。

这两个查询位于中:原创已复制

但是查询产生的结果略有不同.我真的很想知道为什么。我也不能决定哪个查询结果是正确的。我相信这必须归结为datediff逻辑中的一些东西..。它是否“四舍五入”了几个小时,这样它的结果就少了一点?

DateDiff:

DateAdd:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-09 19:53:14

DateDiff计算边界过境点,而DateAdd则做简单的算法。

例如,第一个查询将计算00:5912:01之间的12个边界,从而排除这种差异,但第二个查询将计算它在12小时内。这使得第二个查询“正确”,第一个查询“错误”。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30144139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档