使用 datediff 时遇到被零除错误

Divide by zero error encountered when using datediff

我在使用此查询时收到此错误。有什么办法可以防止这个错误吗?

这是错误

Divide by zero error encountered.

这里是查询:

UPDATE T_SG_WICA_RISK_DETAILS   
SET EarnedPercentage =  case when Policy_ExpiryDate <  (getdate()-1) then '1'
                else datediff(day, Policy_EffectiveDate,(getdate()-1)) /
datediff(day, Policy_EffectiveDate,Policy_ExpiryDate)
                end

根据您的要求和架构,您可以将这些值视为 NULL

UPDATE T_SG_WICA_RISK_DETAILS   
SET EarnedPercentage = case
  when Policy_ExpiryDate <  (getdate()-1) then '1'
  else datediff(day, Policy_EffectiveDate,(getdate()-1)) /
    NULLIF(datediff(day, Policy_EffectiveDate,Policy_ExpiryDate), 0)
end

注意除数中的 NULLIF()。当 DATEDIFF 产生值 0 时,它会产生 NULL 并且由于包含 NULL 的算术表达式将产生 NULL,你的除法最终将是 NULL.

使用上面的方法,如果 NULL 没有用,你可以使用任何值,方法是将 ELSE 中的整个表达式包装到 ISNULL():

UPDATE T_SG_WICA_RISK_DETAILS   
SET EarnedPercentage = case
  when Policy_ExpiryDate <  (getdate()-1) then '1'
  else ISNULL(datediff(day, Policy_EffectiveDate,(getdate()-1)) /
    NULLIF(datediff(day, Policy_EffectiveDate,Policy_ExpiryDate), 0), 0)
end