使用 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
我在使用此查询时收到此错误。有什么办法可以防止这个错误吗?
这是错误
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