摘要:在本教程中,您将学习如何使用 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_id
、title
和 excerpt
SELECT
article_id,
title,
excerpt
FROM
articles;
Code language: SQL (Structured Query Language) (sql)

假设如果 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)

我们这里有一个小问题。
文章 ID 为 1 的摘要列为空白。为了解决这个问题,正如您可能猜到的那样,我们使用 NULLIF
函数。
SELECT
article_id,
title,
COALESCE(NULLIF(excerpt,''), LEFT(body, 50)) AS summary
FROM
articles;
Code language: SQL (Structured Query Language) (sql)

如果 excerpt
为空,则 NULLIF
函数返回 NULL
,否则返回 excerpt
。然后其余部分由 COALESCE
函数处理。
现在您应该理解 NULLIF
函数的工作原理以及何时将其应用于您的查询以使其更灵活。