youmeetmehere

SQL 中解决“被零除错误”


sql语句中遇到“被零除错误”提示的解决方法

 select a/b from table


以上语句当中,如果b的值非零,那么,运行会正常。


如果b的值是零。那么运行时就会报错:“被零除错误”。


 


通过修改成以下可解决此问题!


select a/(case when b=0 then 1 else b end) from table


//

 

select 表达式 1/ nullif ( 表达式 2 ,0 ) as result  from  table;

这样遇到0时返回的结果为null,如果要返回0可以再做如下的处理:

select isnull(表达式 1/ nullif ( 表达式 2 ,0 ),0) as result  from  table;

//在oracle数据库中,NVL()相应Isnull(),oracle中还有NVL2,NVLIF等

 

A.nullif()函数用于检查两个表达式,语法:

NULLIF(expression, expression)

如果两个 expression 相等,则返回 NULL,该 NULL 为第一个 expression 的数据类型

 如果两个 expression 不相等,则返回第一个 expression

B. ISNULL(check_expression, replacement_value)

     check_expression 与 replacement_value 数据类型必须一致

     如果 check_expression 为 NULL,则返回 replacement_value

     如果 check_expression 不为 NULL,则返回 check_expression


我的项目中应用如下:

select  isnull(sum(无税金额)/nullif(sum(开票数量),0),0) as 无税单价 from T01入库明细表;


            this.FieldItems.Add(new JySelectFieldItem("sum(入库数量)", "入库数量", JyEm列数据类型.浮点数, 100, false, true, true, true));

            if (JyUserItemAll.Instance.CurUserItem.IsAuthority(ModuleItem, EnumAuthority.单价可查, false))

            {

            this.FieldItems.Add(new JySelectFieldItem("sum(入库数量*含税价)", "含税金额", JyEm列数据类型.浮点数, 100, false, true, true, true));

            this.FieldItems.Add(new JySelectFieldItem("ISNULL(sum(入库数量*含税价)/NULLIF(sum(入库数量),0), 0)", "含税单价", JyEm列数据类型.浮点数, 100, false, false, true, true));

            }

            

评论