如何避免 SQL 中的“除以零”错误?
在本文中,我们将了解如何避免 SQL 中的“除以零”错误。如果我们将任何数字除以零,它会导致无穷大,并且我们会收到一条错误消息。我们可以使用以下三种方法来避免此错误消息:
- 使用 NULLIF()函数
- 使用 CASE 语句
- 使用 SET ARITHABORT OFF
我们将首先创建一个数据库来执行 SQL 操作。
询问:
CREATE DATABASE Test;
输出:
成功完成的命令显示数据库“Test”已创建。
对于所有方法,我们需要声明两个变量来存储分子和分母的值。
DECLARE @Num1 INT;
DECLARE @Num2 INT;
声明变量后,我们必须设置值。将第二个变量值设置为零。
SET @Num1=12;
SET @Num2=0;
方法一:使用NULLIF()函数
如果两个参数相等,则返回 NULL。如果两个参数不相等,则返回第一个参数的值。
句法:
NULLIF(exp1, exp2);
现在我们在分母中使用 NULLIF()函数,第二个参数值为零。
SELECT @Num1/NULLIF(@Num2,0) AS Division;
- 在 SQL 服务器中,如果我们将任何数字除以 NULL 值,其输出将为 NULL。
- 如果第一个参数为零,则表示如果 Num2 值为零,则 NULLIF()函数返回 NULL 值。
- 如果第一个参数不为零,则 NULLIF()函数返回该参数的值。分裂是正常进行的。
这是完整的查询。
询问:
DECLARE @Num1 INT;
DECLARE @Num2 INT;
SET @Num1=12;
SET @Num2=0;
SELECT @Num1/NULLIF(@Num2,0) AS Division;
输出:
方法二:使用CASE 语句
SQL CASE 语句用于检查条件并返回值。它检查条件直到它为真,如果没有条件为真,则返回 else 部分中的值。
我们必须检查分母的值,即 Num2 变量的值。如果为零,则返回 NULL,否则返回常规除法。
SELECT CASE
WHEN @Num2=0
THEN NULL
ELSE @Num1/@Num2
END AS Division;
这是完整的查询:
询问:
DECLARE @Num1 INT;
DECLARE @Num2 INT;
SET @Num1=12;
SET @Num2=0;
SELECT CASE
WHEN @Num2=0
THEN NULL
ELSE @Num1/@Num2
END AS Division;
输出:
方法 3:设置 ARITHABORT 关闭
为了控制查询的行为,我们可以使用 SET 方法。默认情况下,ARITHABORT 设置为 ON。它终止查询并返回错误消息。如果我们将其设置为 OFF,它将终止并返回一个 NULL 值。
与 ARITHBORT 一样,我们必须将 ANSI_WARNINGS 设置为 OFF 以避免错误消息。
SET ARITHABORT OFF;
SET ANSI_WARNINGS OFF;
这是完整的查询:
询问:
SET ARITHABORT OFF;
SET ANSI_WARNINGS OFF;
DECLARE @Num1 INT;
DECLARE @Num2 INT;
SET @Num1=12;
SET @Num2=0;
Select @num1/@Num2;
输出: