SQL日期差异天数结果错误

时间:2018-05-31 10:14:23

标签: sql sql-server date datetime

我想计算两个日期之间的日差。

当我在2017-01-01'之间计算Differane时' 2018-01-15'它的379天。

SELECT DATEDIFF(DD,'2017-01-01','2018-01-15') 

但是当我将日期分成两个部分并添加。然后我得到结果378。

select DATEDIFF( DD,'2017-01-01', '2017-12-31') + DATEDIFF( DD,'2018-01-01', '2018-01-15') 
任何人解释我为什么会这样?

4 个答案:

答案 0 :(得分:4)

这是非常简单的数学:

I:  <a,b>
II: <a,c>,<c+1,b>   where c is between a and b

I      II
b-a != b-(c+1) + c-a
b-a != b-c-1 + c-a
b-a != b-a-1       -- here is 1 missing day

要做到正确,你可以使用:

select DATEDIFF( DD,'2017-01-01', '2018-01-01') 
     + DATEDIFF( DD,'2018-01-01', '2018-01-15') 

答案 1 :(得分:3)

Datediff计算两个日期之间日期类型的边界。

第一个案例包括“2017-12-31'''2018-01-01'开头的边界”,但不包括第二个案例。

答案 2 :(得分:2)

分成两部分的正确方法是重复日期:

select (DATEDIFF(DAY, '2017-01-01', '2017-12-31') +
        DATEDIFF(DAY, '2017-12-31', '2018-01-15') 
       )

你的版本会跳过一天,因此一天之内就不会感到惊讶。

答案 3 :(得分:1)

这是因为在第二种情况下未计算的额外日期。解释为什么它会在您的第一个查询中发生

SELECT DATEDIFF(DD,'2017-01-01','2018-01-15')
你正在做类似的事情:1 - 380 = 379。

在第二个

它是(1-365)+(1-15)= 364 + 14 = 378。

取决于您的目标

最好将其分解为:

select DATEDIFF( DD,'2017-01-01', '2018-01-01') + DATEDIFF( DD,'2018-01-01', '2018-01-15')