处理“除以零错误遇到错误”

Posted

技术标签:

【中文标题】处理“除以零错误遇到错误”【英文标题】:Handle "Divide by zero error encountered error" 【发布时间】:2011-08-04 06:53:23 【问题描述】:
    SELECT   ((CASE WHEN (qid2.AgeBelow_16 - qid1.AgeBelow_16)= 0 THEN 1 ELSE (qid2.AgeBelow_16- qid1.AgeBelow_16) END )/ (CASE WHEN [qid1].AgeBelow_16= 0 THEN 1 ELSE [qid1].AgeBelow_16  END))*100 AS AgeBelow_16_Percent, 
    -- otherfields

    FROM
    -- whole query

我正在使用上述查询来计算旧值和新值的百分比差异。主要问题是 0 如果任何字段值为 0 则抛出“除以零错误遇到错误”,所以我使用 case when then else end。上面的实现是好的还是可以写得更好,那么请建议我,因为当字段像 10 以上那样巨大时会更加混乱。

【问题讨论】:

【参考方案1】:

可能是这样的?

declare @X int = 0
select 10 / isnull(nullif(@X, 0), 1)

【讨论】:

@Govind KamalaPrakash Malviya:不一定,如果不是,我认为差异是无关紧要的。但是您可能应该自己对其进行基准测试。或者,您可以使用 COALESCE 而不是 ISNULL,看看它是否对您更好(更快)。 @Govind - 在非常慢的笔记本电脑上对 100000 行进行了快速测试,Andriy 是对的。耗时 2.7 秒,时差约为 50 毫秒。

以上是关于处理“除以零错误遇到错误”的主要内容,如果未能解决你的问题,请参考以下文章

17)错误处理

Lua 错误处理

PHP:自定义错误处理程序 - 处理解析和致命错误

python错误处理之try...except...finally...错误处理机制。

python错误处理之try...except...finally...错误处理机制。

MySql错误处理-错误处理的例子