SQL NULLIF 函数:一个便捷的 SQL 控制流函数的用法

摘要:在本教程中,您将学习如何使用 SQL NULLIF 函数向查询添加逻辑。

SQL NULLIF 函数简介

除了 COALESCE 函数外,SQL 还提供了 NULLIF 函数,它是一个 控制流函数,允许您测试参数并根据评估结果返回第一个参数或 NULL

NULLIF 函数接受两个参数。如果两个参数相等,则 NULLIF 函数返回 NULL,否则返回第一个参数。

以下是 NULLIF 函数的语法。

NULLIF(argument_1,argument_2);Code language: SQL (Structured Query Language) (sql)

NULLIF 函数等效于以下搜索的 CASE 表达式

CASE WHEN argument_1 = argument_2
   THEN NULL
ELSE
   argument_1 
END;Code language: SQL (Structured Query Language) (sql)

如果两个参数相等,则表达式返回 NULL,否则返回 argument_1

SQL NULLIF 示例

以下语句返回 NULL,因为 100 等于 100。

SELECT NULLIF(100,100);Code language: SQL (Structured Query Language) (sql)

以下语句返回 100,因为 100 小于 200,NULLIF 函数返回第一个参数,即 100。

SELECT NULLIF(100,200);Code language: SQL (Structured Query Language) (sql)

以下语句返回 100,因为 100 不等于 NULL

SELECT NULLIF(100,NULL);Code language: SQL (Structured Query Language) (sql)

以下语句返回 NULL。因为 NULL 不等于 100,NULLIF 函数返回第一个参数,该参数不是 NULL

SELECT(NULL,100);Code language: SQL (Structured Query Language) (sql)

以下语句返回 SQL 字符串字面量,因为字符串 SQ  等于字符串 SQL

SELECT NULLIF('SQL','SQL');Code language: SQL (Structured Query Language) (sql)

我们将 创建一个名为 articles 的新表,以演示一个可以应用 NULLIF 函数的真实案例。

CREATE TABLE articles (
    article_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    excerpt VARCHAR(255),
    body TEXT
);Code language: SQL (Structured Query Language) (sql)

以下 INSERT 语句将一些行插入到 articles 表中。

INSERT INTO articles(title,excerpt,body)
VALUES('SQL NULLIF function','', 'This tutorial shows you how to use the SQL NULLIF function'),
	  ('SQL tutorial','Learn how to use SQL at sqltutorial.org', 'You will learn SQL with practical examples'),
      ('SQL query',null, 'You will learn how to use SELECT statement to query data from tables');Code language: SQL (Structured Query Language) (sql)

假设我们要在概览页面上显示文章的标题和摘要。为此,我们按如下方式查询 article_idtitleexcerpt

SELECT 
    article_id, 
    title, 
    excerpt
FROM
    articles;Code language: SQL (Structured Query Language) (sql)
SQL NULLIF function example

假设如果 excerpt 不可用,您可以使用 body 的前 50 个字符来代替显示。为此,您可以使用 COALESCE 函数返回 excerpt 列(如果不是 NULL),否则返回 body 的前 50 个字符。

SELECT 
    article_id,
    title, 
    COALESCE(excerpt, LEFT(body, 50)) AS summary
FROM
    articles;Code language: SQL (Structured Query Language) (sql)
SQL NULLIF function with COALESCE

我们这里有一个小问题。

文章 ID 为 1 的摘要列为空白。为了解决这个问题,正如您可能猜到的那样,我们使用 NULLIF 函数。

SELECT 
    article_id, 
    title, 
    COALESCE(NULLIF(excerpt,''), LEFT(body, 50)) AS summary
FROM
    articles;Code language: SQL (Structured Query Language) (sql)
SQL NULLIF function

如果 excerpt 为空,则 NULLIF 函数返回 NULL,否则返回 excerpt。然后其余部分由 COALESCE 函数处理。

现在您应该理解 NULLIF 函数的工作原理以及何时将其应用于您的查询以使其更灵活。

本教程是否有帮助?