我想计算两个日期之间的日差。
当我在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')
任何人解释我为什么会这样?
答案 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')