You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:43:01