SQL中DATEDIFF求和及EOMONTH获取月末值常见问题咨询
SQL日期计算问题解答
问题1:SUM(DATEDIFF计算逻辑问题
- 核心问题是未处理
DATE_E为NULL的场景:DATEDIFF函数任意输入参数为NULL时,返回结果也为NULL,而SUM聚合会自动忽略NULL值,导致所有DATE_E为NULL的行的天数完全没有被计入统计,最终求和结果偏小。 - 修复方案可根据业务需求二选一:
- 若
DATE_E为NULL时默认取当前日期计算:
SUM(DATEDIFF(DAY, DATE_S, COALESCE(DATE_E, GETDATE())) + 1)- 若
DATE_E为NULL时对应行统计为0:
SUM(COALESCE(DATEDIFF(DAY, DATE_S, DATE_E) + 1, 0)) - 若
问题2:EOMONTH输入年月字符串报错修复
- 报错原因:
'2019-05'是字符串格式的年月值,不是EOMONTH要求的DATE/DATETIME类型输入,仅拼接不做类型转换无法被函数识别。 - 修复代码:
DAY(EOMONTH(CAST(CONCAT(DATE_S, '-01') AS DATE)))
逻辑为先给年月字符串拼接当月1号,转为标准日期格式后再做类型转换,即可正常传入EOMONTH计算当月最后一天的日期。
内容的提问来源于stack exchange,提问作者Tick _Tack
相关产品推荐
相关产品推荐

