摘要:在本教學中,您將學習如何使用 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)

假設如果 except
不可用,您可以使用 body
的前 50 個字元來顯示。為此,您可以使用 COALESCE
函數,如果摘要欄不是 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)

如果摘要是空的,NULLIF
函數會傳回 NULL
,否則會傳回摘要。然後其餘部分由 COALESCE
函數處理。
現在您應該了解 NULLIF
函數的工作方式,以及何時將其應用於查詢,以使其更具彈性。