执行含datediff函数的SQL语句出现除零错误如何解决
错误根因
你遇到的除零报错是因为当Policy_EffectiveDate(保单生效日期)和Policy_ExpiryDate(保单到期日期)为同一天时,分母datediff(day, Policy_EffectiveDate,Policy_ExpiryDate)的计算结果为0,触发非法运算。
修复方案
在原有case逻辑中新增分母非0判断分支即可规避报错,修改后的SQL语句如下:
UPDATE T_SG_WICA_RISK_DETAILS SET EarnedPercentage = case when Policy_ExpiryDate < (getdate()-1) then '1' -- 生效日与到期日为同一天时,可根据业务需求调整此处返回值,也可改为'0' when datediff(day, Policy_EffectiveDate,Policy_ExpiryDate) = 0 then '1' else datediff(day, Policy_EffectiveDate,(getdate()-1)) * 1.0 / datediff(day, Policy_EffectiveDate,Policy_ExpiryDate) end
补充说明
- 代码中新增的
* 1.0是为了避免整数除法丢失小数精度,如果业务只需要整数比例可以删除该段 - 分母为0时的返回值可根据实际业务规则灵活调整,没有强制要求
内容的提问来源于stack exchange,提问作者ppn
相关产品推荐
相关产品推荐

