闰年场景下日期差计算的SQL报表问题排查与修正
问题修正:SQL报表月份计算闰年误差问题
原代码靠总天数除以30取整的方式算月份数,这种方法不管不同月份的天数差异和闰年影响,导致整周期的月份计算出错(比如2020-06-01到2023-05-31实际是36个月,原代码算出37个月)。
以下是保留原代码结构的修正版本:
select case when ('01/06/2020' ='' AND '31/05/2023' ='') then 'N/A' else '01/06/2020' + ' to ' + '31/05/2023' + ' (' + cast( datediff(month, convert(datetime,'01/06/2020',103), dateadd(day, 1, convert(datetime,'31/05/2023',103)) ) AS varchar) + ' months )' end
修正说明:
- 替换了原有的
round(datediff(d,...)/30.0,0)计算逻辑,改用datediff(month, 开始日期, 结束日期+1天)的方式:- SQL Server的
datediff(month)会计算两个日期之间跨越的月份边界数,当结束日期是当月最后一天时,加1天到下月第一天,就能准确得到完整的月份数。
- SQL Server的
- 完全保留了原代码的case分支结构、日期格式转换(103格式:dd/mm/yyyy)和结果拼接逻辑,仅修改核心计算部分。
内容的提问来源于stack exchange,提问作者shaunw87
相关产品推荐
相关产品推荐

