COALESCE(value1, value2, ..., valuen)
回傳參數列表中第一個非 NULL的值;若全部為 NULL 則回傳 NULL。
SELECT COALESCE(NULL, NULL, 1); -- 1
SELECT COALESCE(NULL, NULL, NULL, 1); -- 1
SELECT COALESCE(NULL, NULL, NULL); -- NULL
SELECT COALESCE(column_name, 0) AS val FROM t; -- 欄位為 NULL 時顯示 0
COALESCE(discount, 0) 避免 NULL 參與運算導致結果為 NULL。COALESCE(mobile, email, '未提供') 依優先順序取聯絡方式。ORDER BY COALESCE(sort_order, 999) 將無排序值置後。| 函數 | 參數數 | 標準 | 備註 |
|---|---|---|---|
COALESCE | ≥2 | ANSI SQL | 可移植,支援多參數 |
IFNULL | 2 | MySQL 專用 | 簡潔,僅兩參數 |
IF(expr, true, false) | 3 | MySQL 專用 | 邏輯判斷,非單純 NULL 處理 |
CASE WHEN col IS NULL THEN ... | 靈活 | ANSI SQL | 最通用,可處理複雜邏輯 |
COALESCE 內部轉為 CASE 表達式,效能相當。避免在大表 WHERE 條件中對欄位使用 COALESCE,改用 IS NULL 判斷以利用索引。