COALESCE 排除空字串方法
Contents
之前有寫過 mysql COALESCE 取代null值好方法 | 程式狂想筆記,這篇補充如何同時處理 NULL 和空字串的情況。
COALESCE 基本用法
COALESCE 會依序評估所有參數,回傳第一個非 NULL 的值:
|
|
NULLIF 的用法
NULLIF(a, b) 比較兩個值:若 a = b 則回傳 NULL,否則回傳 a:
|
|
同時排除 NULL 和空字串
資料庫欄位有時會同時出現 NULL 和空字串 '',若只用 COALESCE 只能處理 NULL,無法過濾空字串。組合 COALESCE + NULLIF 可同時處理兩種情況:
|
|
執行邏輯:
NULLIF(Other, '')→ 若Other = '',回傳 NULL;否則回傳原值COALESCE(..., Industry)→ 若第一個參數是 NULL,回傳Industry
效果:
| Other | Industry | 結果 |
|---|---|---|
| ‘IT’ | ‘Tech’ | ‘IT’ |
| '' | ‘Tech’ | ‘Tech’ |
| NULL | ‘Tech’ | ‘Tech’ |
| NULL | NULL | NULL |
多層 Fallback 範例
|
|
各資料庫的支援情況
| 資料庫 | COALESCE | NULLIF | 備注 |
|---|---|---|---|
| MySQL 5.x / 8.x | ✓ | ✓ | 完整支援 |
| PostgreSQL | ✓ | ✓ | 完整支援,另有 IS DISTINCT FROM |
| Oracle | ✓ | ✓ | 另有 NVL(val, default) 可用 |
| SQL Server | ✓ | ✓ | 另有 ISNULL(val, default) |
| SQLite | ✓ | ✓ | 完整支援 |
各資料庫的替代方案
Oracle(NVL 和 DECODE):
|
|
SQL Server(ISNULL):
|
|
PostgreSQL(額外技巧):
|
|