📜  如何避免 SQL 中的“除以零”错误?

📅  最后修改于: 2022-05-13 01:54:52.550000             🧑  作者: Mango

如何避免 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;

输出: