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));
}
评论