2014-10-20 43 views
3

考虑SQL的下面的代码片段:为什么datediff比实际差异少返回1天?

Select DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243') -- 1 

这将返回“2”,但其实我是想为“3”,因为我计算由雇员参加天的总数。即在上述情况下,他参加了天,但datediff显示为2.有什么办法可以解决这个问题吗?

+1

只需在结果中加1?如果右边的时间在左边的时间之前是预期的答案2? – 2014-10-20 17:35:36

+2

得到小时数,除以24,然后取整。 – 2014-10-20 17:38:17

+2

Datediff返回一个值与另一个值之间传递的边界数;在几天的情况下,将功能视为计算午夜。如果你想让你的查询返回三个(每个涉及的实际日期一个),可以加入到日历表中,自动添加一个结果,或者在几小时内完成datediff,除以24.0,并将其四舍五入到最接近的整数号码 – AHiggins 2014-10-20 17:38:22

回答

4

DATEDIFF与dd参数返回两个日期之间的日期边界数。

所以DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243')将返回2 - 因为它计数第23和第24。 如果你想要计数22,23和24,那么只需加1即可。

Select DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243') + 1 
+3

是的,这是'3 - 1 = 2'而不是'3 - 1 = 3'的原因,即使有三个数字(1,2,和3)。你在做什么是减法,但你要找的是*基数*。另一种看待它的方式是考虑开始和结束日期相同的情况。今天和今天之间有0天,但仍有一天涉及。这就是为什么你需要添加1。 – 2014-10-20 17:53:38

0

由于某些未知原因DATEDIFF(dd, ...函数计算基于24小时日的天数。如果剩余时间少于24小时,则显示零。

你应该只使用你的时间的日期部分。

(这是一个旧帖子,但从未正确回答)