跨資料庫開發時,NULL 處理函數名稱不同但邏輯相同。速查表如下:
| 資料庫 | 函數 | 語法 | 範例 |
|---|---|---|---|
| SQL Server | ISNULL |
ISNULL(check_expression, replacement_value) |
ISNULL(NULL, 'N/A') → 'N/A' |
| Oracle | NVL |
NVL(expr1, expr2) |
NVL(NULL, 'N/A') → 'N/A' |
| MySQL | IFNULL |
IFNULL(expr1, expr2) |
IFNULL(NULL, 'N/A') → 'N/A' |
| Oracle/PostgreSQL/標準 SQL | COALESCE |
COALESCE(expr1, expr2, ...) |
COALESCE(NULL, NULL, 'N/A') → 'N/A' |
ISNULL / NVL / IFNULL:**僅接受兩個參數**,型別需相容。COALESCE:**支援 N 個參數**,回傳第一個非 NULL 值,符合 ANSI SQL 標準,跨資料庫可攜性最佳。NVL2(expr1, expr2, expr3):expr1 不為 NULL 回傳 expr2,否則 expr3。-- 統一寫法 (跨庫相容)
SELECT COALESCE(commission_pct, 0) * salary AS bonus FROM employees;
-- Oracle 特有進階
SELECT NVL2(commission_pct, '有獎金', '無獎金') FROM employees;
ISNULL 在 SQL Server 中為**非標準**,移植時必須改寫。NVL 兩參數皆為 NULL 時回傳 NULL,COALESCE 同理。|| 遇 NULL 會變 NULL,務必先 NVL(col, '')。新專案建議全面使用 COALESCE,舊專案維持原有函數並建立對照表供團隊參考。