sql 语句遇到以零作除数错误

我们在写sql的时候会遇到这种报错
以零作除数错误
解决方法:
情况一:

列如这条查询语句报错
select A/B from tab
一般情况下我们使用case when 来判断 B 的值是否为0
SELECT 
CASE WHEN B=0 THEN 0 ELSE A/B END  
FROM TAB

情况二:

如果遇到下面这样的聚合函数呢?
列如:
SELECT  SUM(A)/COUNT(B) FROM TAB
遇到这样的情况CASE WHEN 是不能判断COUNT(B)的值的,因为WHEN后面的条件不能使用聚合函数(语法要求),
这个时候我们可以这样处理
SELECT  
ISNULL(SUM(A)/NULLIF(COUNT(B),0),0)
FROM  TAB

其中这里使用了两个函数,NULLIF()和ISNULL()

NULLIF函数有两个参数,定义如下:
NULLIF( expression1 , expression2 )
其作用就是:如果两个指定的表达式相等,就返回NULL值。

ISNULL函数也有两个参数,定义如下:
ISNULL( expression1 , expression2 )
其作用是:如果第一个参数的结果为NULL,就返回第二个参数的值。

当COUNT(B)的结果为0时,恰好与第二个给定的参数0相等,这个时候NULLIF函数就会返回NULL,而SUM(A)在除以NULL时结果为NULL,外层使用ISNULL函数再对NULL值进行判断,这样最终结果就是0了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值