SQL日期天数差计算结果不一致问题求助
为什么分段计算日期差和直接计算结果不一致?
这个问题的核心在于搞清楚DATEDIFF(DD, start, end)的计算逻辑——它返回的是两个日期之间跨越的午夜边界数量,简单说就是end日期减去start日期的整数天数差,不会同时包含start和end当天(除非start和end是同一天,结果为0)。
咱们拆解一下你的计算:
直接计算:
SELECT DATEDIFF(DD,'2017-01-01','2018-01-15')
2017是平年,从2017-01-01到2018-01-01整整跨越365个午夜,再到2018-01-15又跨越14个午夜,总共365+14=379天,结果是对的。分段计算:
select DATEDIFF( DD,'2017-01-01', '2017-12-31') + DATEDIFF( DD,'2018-01-01', '2018-01-15')
第一段DATEDIFF(DD,'2017-01-01','2017-12-31')返回364天——这是从2017-01-01到2017-12-31跨越的午夜数,不包含2017-12-31到2018-01-01的那个午夜;第二段返回14天,两段相加364+14=378天,正好少了跨年度的那1天。
如果想要分段计算和直接计算结果一致,你需要把第一段的结束日期改成2018-01-01:
SELECT DATEDIFF(DD,'2017-01-01','2018-01-01') + DATEDIFF(DD,'2018-01-01','2018-01-15')
这个语句的结果就是365+14=379天,和直接计算完全匹配。
内容的提问来源于stack exchange,提问作者Mr. Bhosale
相关产品推荐
相关产品推荐

