MSSQL遇到以零作除数错误的处理方法

在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧。

做个会报这个错误的示例,如以下sql代码:

declare @a int;
declare @b int;
set @a=10
set @b=0
select @a/@b

运行就会抛出遇到以零作除数错误的错误

本章主要讲解一下如何在sql server处理除数为零的两种方法:
一,利用case语句。
我们改写上面的sql,当@b=0的时候,我们就返回1.改写如下:

declare @a int;
declare @b int;
set @a=10
set @b=0
select case @b when 0 then 1 else @a/@b end

这样写当然是正确的,但显的麻烦,下面我们看一下第二处理方法。

二,利用nullif函数
nullif函数有两个参数,定义如下:

NULLIF( expression , expression )

其作用就是:如果两个指定的表达式相等,就返回null值。

看一示例:

select nullif(0,0)

运行结果:null

我们知道,null与任何数进行任何运算,其结果都等于null,利用这点,我们可以将上面的sql改写为:

1 declare @a int;
2 declare @b int;
3 set @a=10
4 set @b=0
5 select @a/nullif(@b,0)

其运行结果自然为null了。

再利用isnull函数,我们就可以实现当@b=0的时候,结果返回1的需求了。最终的sql改写如下:

declare @a int;
declare @b int;
set @a=10
set @b=0
select isnull(@a/nullif(@b,0),1)

OK,两种方法介绍完毕,相对于方法一,我更推荐大家使用方法二,因为方法二的代码更简省。

(如果有朋友对isnull函数不了解的话,这里可以解释一下。
isnull的定义如下:
isnull(参数1,参数2)
其作用就是,当参数1等于null时,就返回参数2的值。)

来源:.net学习网

时间: 2024-10-12 01:27:17

MSSQL遇到以零作除数错误的处理方法的相关文章

sqlserver 遇到以零作除数错误的处理 不报错的解决方法

原文:sqlserver 遇到以零作除数错误的处理 不报错的解决方法 使用sqlserver 的选项来禁止出现以零除的错误中断,让而让其为null set ansi_warnings offSET ARITHABORT offSET ARITHIGNORE on select 1/0 显示结果 无列名 null

遇到sql server 遇到以零作除数错误

两种方法: 原: SELECT (Quantity*Price)/(Quantity*UnitPrice) AS [平均值]  FROM ##表  报错:遇到以零作除数错误 1.在除数那里判断分母是否为0(用'NULLIF'函数) SELECT (Quantity*Price)/NULLIF((Quantity*UnitPrice),0) AS [平均值]   FROM ##表 2.在除数那里判断分母是否为0(用'CASE WHEN'函数) SELECT (CASE WHEN Quantity*

遇到了 “遇到以零作除数错误” 的问题

开发的时候,写了个很简单的Sql ,大概就是 总数除以数量 得出的平均值.看起来很平常是不是!简单来说就是 Total / Count 嘛!最多转个2位小数用Convert就完事了对不对. 但是呢,有些数据的Count值本身是就是0的.然后就会报遇到以0作为除数的错误的问题了啊~ 然后演示几种可能出现的情况,先初始化一个测试样例, 1 CREATE TABLE TmpA1 (ID INT IDENTITY(1,1),Total NUMERIC(8,2),CountNr INT) 2 3 INSE

MSSQL基于一致性的I/O错误,解决方法之一

1 --单用户模式 2 EXEC SP_DBOPTION 'DBName','single','true' 3 4 --修复 5 DBCC CHECKTABLE('TableName',REPAIR_ALLOW_DATA_LOSS) 6 7 --多用户模式 8 EXEC SP_DBOPTION 'DBName','single','false' 这个方法解决了我工作中遇到的问题,但是会造成损坏数据的丢失,慎用.

js,java,浮点数运算错误及应对方法

js,java,浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2进制的进制基数是2,那么一个数字只要被因素包含大于2的质数的数除,都会产生无限循环小数.无限循环小数和无理数都无法,和非无限循环的有理数一起用同一种方式存储到存储介质上的同时还保持计算的兼容性. 对于无限循环小数,可以设计一种格式存储到介质上,但是同时又要和非无限循环的有理数能够计算,效率应该会变

CentOS 安装hping3工具及安装遇到的错误及解决方法

hping是用于生成和解析TCPIP协议数据包的开源工具.创作者是Salvatore Sanfilippo.目前最新版是hping3,支持使用tcl脚本自动化地调用其API.hping是安全审计.防火墙测试等工作的标配工具.它不仅能发送 ICMP 回应请求,它还可以支持 TCP.UDP.ICMP 和 RAW-IP 协议,它有一个路由跟踪模式,能够在两个相互包含的通道之间传送文件.Hping 常被用于检测网络和主机,其功能非常强大,可在多种操作系统下运行,如 Linux,FreeBSD,NetBS

fedora25 安装virtualbox5.1 出现提示Kernel driver not installed (rc=-1908) 错误的解决方法

fedora25 安装virtualbox5.1 出现提示Kernel driver not installed (rc=-1908) 错误的解决方法: $ sudo /usr/lib/virtualbox/vboxdrv.sh setup        vboxdrv.sh: Building VirtualBox kernel modules.             vboxdrv.sh: Starting VirtualBox services.

Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法

Windows 7 64bit上安装Oracle Database 12c,出现以下错误: 解决方法: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER  启动 第二步:控制面板>所有控制面板项>管理工具>计算机管理>系统工具>共享文件夹>共享   右键单击“共享”>新建共享> 点击“下一步”>   单击“浏览”> 选择"本地磁盘(C:)">确定   单击“下一步”:     单击“

飞鸽传书 bind() error=10048错误的解决方法

提示  bind() 错误=10048 原因:其他程序占用飞鸽的 2425 端口 比如:飞秋也是使用2425端口 解决:用netstat命令查看是哪个进程占用了该端口 格式:netstat -ano | find "2425" 结果:  UDP    0.0.0.0:2425     *:*        1716 最后的1716就是占用2425进程的进程ID,看看是什么,可以结束的直接结束该进程,再打开飞鸽就可以了. 关于netstat命令可以输入命令 netstat /? 查看更多