COALESCE() 函數 (SQL COALESCE() Function)
COALESCE() 函數會從參數列表中返回第一個非 NULL 的值。如果所有參數都是 NULL,則返回 NULL。
COALESCE() 在處理可能含有 NULL 值的資料時特別實用,可以用來設定預設值。
COALESCE 語法
COALESCE(value1, value2, ..., valueN)
函數會依序檢查每個參數,返回第一個非 NULL 的值。
COALESCE 基本用法 (Example)
SELECT COALESCE(NULL, NULL, 'Hello', 'World');
結果返回:Hello (第一個非 NULL 的值)
SELECT COALESCE(NULL, 100, 200);
結果返回:100
COALESCE 實務應用 (Example)
假設我們有一個 customers 資料表:
| C_Id | Name | Nickname | Phone |
|---|---|---|---|
| 1 | 張一 | 小張 | 02-12345678 |
| 2 | 王二 | NULL | NULL |
| 3 | 李三 | 阿三 | NULL |
若我們希望優先顯示暱稱,若沒有暱稱則顯示姓名:
SELECT C_Id, COALESCE(Nickname, Name) AS DisplayName
FROM customers;
查詢結果:
| C_Id | DisplayName |
|---|---|
| 1 | 小張 |
| 2 | 王二 |
| 3 | 阿三 |
COALESCE 搭配預設值
當資料可能為 NULL 時,可以使用 COALESCE() 提供預設值:
SELECT Name, COALESCE(Phone, '未提供') AS Phone
FROM customers;
查詢結果:
| Name | Phone |
|---|---|
| 張一 | 02-12345678 |
| 王二 | 未提供 |
| 李三 | 未提供 |
COALESCE 與 IFNULL / NVL 的比較
- MySQL: 有
IFNULL(expr1, expr2)函數,但只能處理兩個參數 - Oracle: 有
NVL(expr1, expr2)函數,同樣只能處理兩個參數 - COALESCE: 是 ANSI SQL 標準,各資料庫都支援,且能處理多個參數
建議優先使用 COALESCE(),因為它是標準 SQL 語法且更具彈性。