无论是进行数据分析、报表制作还是应用开发,使用MSSQL的用户经常会遇到除数为0的计算错误提示。这类错误可能出现在使用T-SQL尤其是数学函数计算的地方,无论是SUM()函数还是AVG()函数,就算只有一个除数为0的情况都会报错,产生棘手的问题。
针对除数为0的情况,MSSQL给出了下面的错误:
Msg 8134,Level 16,State 1,Line 1
除以零错误:除数必须不等于零。
报错基本上就是“除数不能为0”,但是要解决这个问题,就要从产生这个错误的原因开始调查。当除数为0时,MSSQL在进行数学计算时,实际上是将查询结果作为除数,当查询结果包含了0时,就会报错。
解决办法有二:第一种是使用ISNULL函数将结果为空的行补上一个默认值,然后使用之前的查询再进行一次计算。代码可以如下:
SELECT
SUM(ISNULL(表.字段, 0)) / COUNT(表.字段) AS avg
FROM
表
另外一种解决方案是使用NULLIF函数来替换DIVIDE函数报空除0,当出现除数为0的情况时会返回NULL,代码如下:
SELECT
SUM(ISNULL(表.字段, 0)) / NULLIF(COUNT(表.字段), 0) AS avg
FROM
表
总之,针对除数为0的MSSQL错误提示,可以使用上述两种解决方案,从而避免这个棘手的问题。