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

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

如果摘要是空的,NULLIF 函數會傳回 NULL,否則會傳回摘要。然後其餘部分由 COALESCE 函數處理。

現在您應該了解 NULLIF 函數的工作方式,以及何時將其應用於查詢,以使其更具彈性。

這個教學對您有幫助嗎?