COALESCE(expression1, expression2, ..., expressionN)
-- 返回參數列表中第一個非 NULL 的表達式值
-- 等價於:
CASE
WHEN expression1 IS NOT NULL THEN expression1
WHEN expression2 IS NOT NULL THEN expression2
...
ELSE NULL
END
-- 取聯繫電話:手機 > 辦公 > 住宅 > '無'
SELECT COALESCE(mobile, office_phone, home_phone, '無') AS contact_phone
FROM customers;
ORDER BY COALESCE(priority, 999), created_at;
GROUP BY COALESCE(region, 'Unknown');
SELECT price * COALESCE(discount, 1) AS final_price; -- 無折扣按原價
| 特性 | COALESCE | ISNULL |
|---|---|---|
| 參數數量 | 不限(≥2) | 固定 2 個 |
| 標準 | ANSI SQL 標準 | T-SQL 專有 |
| 返回類型 | 按優先級推導所有參數 | 跟隨第一個參數 |
| 可空性 | 結果可為 NULL(若全 NULL) | 結果不可為 NULL(若第二參數非 NULL) |
| 性能 | 微慢(轉為 CASE) | 極快(內部函數) |
SELECT
COALESCE([2023], [2022], [2021], 0) AS latest_year_sales
FROM pivot_table;
INT + DATETIME)。COALESCE(col, 0) 於索引列可能導致隱式轉換阻礙索引尋找 → 優先用 ISNULL 或 CASE。COALESCE 是處理「多備選、取首非空」的標準利器。掌握其與 ISNULL 的類型推導差異,能寫出更健壯、可移植、可維護的 T-SQL 代碼。