avatar

目錄
T-SQL COALESCE,只要不是 NULL,那就來一個吧

Hi,大家好,之前有寫過一篇用 NULLIF(文章連結在此) 來處理 NULL 情況的文章,這次要介紹另一種也是在 T-SQL 上處理 NULL 情況的函式,就先直接來看看範例


COALESCE

sql
1
2
3
4
5
6
7
SELECT COALESCE('123', '456')
SELECT COALESCE(NULL, '123')

GO

DECLARE @null varchar(10);
SELECT COALESCE(NULL, @null)

執行結果

使用 COALESCE 函數,會依照參數的順序逐一判斷,如果遇到不為 NULL 的參數值,就會直接傳回,不管後續的參數是什麼

另一種情況是剛好全部的參數值都是 NULL,那最後還是會傳回 NULL

用 JavaScript 的陣列函式來看,還真是像是 [].find((item) => item !== NULL)


用 COALESCE 來替代 CASE

接下來是示範 COALESCE 與 CASE 兩者都可以達到一樣的效果的寫法

sql
1
2
3
4
5
6
7
8
9
10
11
DECLARE @a int;
DECLARE @b int;
DECLARE @c int = 5;

SELECT
CASE WHEN @a IS NOT NULL THEN @a
WHEN @b IS NOT NULL THEN @b
WHEN @c IS NOT NULL THEN @c ELSE NULL END AS result

SELECT
COALESCE(@a, @b, @c) AS result

執行結果

比較後可以看到 COALESCE 的程式碼減少非常多,如果有遇到類似的多次判斷 NULL 這種需求就能派上用場了!

文章作者: 小馬彬
文章鏈接: https://littlehorseboy.github.io/2020/11/01/202011-t-sql-coalesce/
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 小馬彬的部落格

評論