SQL Server NULLIF

17 Mar 2025 | 4 分钟阅读

SQL Server 中的 NULLIF 函数接受两个参数并比较它们,以确定它们是相同还是不同。如果两个参数相等,它将返回一个 NULL 值。如果参数不相同,它将返回第一个参数。我们可以将此函数与诸如 SELECT、WHERE 和 GROUP BY 等子句直接一起使用。

此函数使用户能够对显式定义或由表达式返回的数值和字符串值进行比较。它是一个更高级的函数,具有一些基本用例。最常见的是比较两个单独列的值,并检测和处理列中的空或不完整数据(即 NULL 或 ' ')。

语法

以下是 SQL Server 中 NULLIF 函数的语法

在上面的语法中,我们可以看到两个参数 expression1expression2。它们是执行标量值比较的标量表达式。它可以是数值、字符串或任何东西,即列、参数、变量、子查询、数学运算或返回单个数值或字符串值的函数。

NULLIF 函数不能与 SQL Server 中类似 RAND() 函数的时间相关函数一起使用。当我们使用时间相关函数时,该函数可能会被评估两次,从而产生与这两个调用不同的结果。

注意:NULLIF 表达式必须具有相同的数据类型,或者数值表达式必须在字符串表达式之前。否则,查询将失败,并且会返回一个转换错误。它会返回一个转换错误,因为数值表达式通常首先由 NULLIF 处理。

NULLIF 函数示例

让我们通过一些例子来了解如何使用 NULLIF 函数。

1. NULLIF 与数值数据

在这里,我们将看到 NULLIF 如何与数值一起工作。此示例使用 NULLIF 函数并返回 NULL 值,因为两个参数相同

这是输出

SQL Server NULLIF

此示例使用 NULLIF 函数并返回第一个参数值,因为两个参数不相同

这是输出

SQL Server NULLIF

2. NULLIF 与字符串数据

在这里,我们将看到 NULLIF 如何与字符串表达式一起工作。此示例使用 NULLIF 函数并返回 NULL 值,因为两个字符串相同

这是输出

SQL Server NULLIF

此示例使用 NULLIF 函数并返回第一个参数值,因为两个字符串不相同

这是输出

SQL Server NULLIF

此示例使用 NULLIF 函数并抛出转换错误,因为当字符串不在数字之前时,NULLIF 逻辑会失败

这是输出

SQL Server NULLIF

3. NULLIF 与 CAST 函数

在这里,我们将看到 NULLIF 如何与 CAST 函数一起工作。此示例使用 NULLIF 和 CAST 函数并返回 NULL 值

这是输出

SQL Server NULLIF

我们将得到一个 NULL 结果,因为 CAST 函数首先返回一个整数值 11。然后,第一个参数和第二个参数都变得相等并显示 NULL 输出。

NULLIF 函数与表

本节将解释使用 NULLIF 函数的实际情况。当处理旧数据时,NULLIF 表达式是有利的,其中包括列中混合的 null 和空字符串。请参阅以下示例以进行演示

为此,我们首先需要使用下面给出的语句在指定的数据库中创建一个名为 'Student' 的表

接下来,我们将按如下方式向此表中添加一些值

我们可以使用 SELECT 语句来显示该表。我们将在表中看到以下数据

SQL Server NULLIF

在表中,我们可以看到一些 phone 列字段是可空的 并且是 空的。它包含 NULL 值,因为在存储数据时不知道电话号码。并且由于数据输入错误而有一个空字段。这种情况在处理旧数据库时经常出现。

如果我们想获取没有电话号码的学生详细信息,我们可以使用以下查询

它将显示包含没有电话号码的学生详细信息的结果

SQL Server NULLIF

假设我们希望在 phone 列中也得到空字符串的结果。我们可以通过使用 NULLIF 表达式来做到这一点

它将显示包含在电话号码列中具有 NULL 或空字符串的学生详细信息的结果

SQL Server NULLIF

NULLIF 和 CASE 表达式

SQL Server 中的 NULLIF 表达式类似于 CASE 表达式。请参阅使用 NULLIF 表达式的以下表达式

上面的表达式可以用 CASE 表达式重写,如下所示

我们可以借助以下示例来理解它

它将显示下面的结果,我们可以在其中看到两个表达式给出相同的结果。

SQL Server NULLIF