ISNULL:替換 NULL
ISNULL(check_expression, replacement_value)
- 兩參數型別必須一致。
check_expression 為 NULL → 回傳 replacement_value。
- 不為 NULL → 回傳
check_expression。
NULLIF:比較相等則回傳 NULL
NULLIF(expression1, expression2)
- 兩運算式相等 → 回傳 NULL (型別同
expression1)。
- 不相等 → 回傳
expression1。
實戰場景
1. 避免除以零
SELECT 100 / NULLIF(Quantity, 0) AS UnitPrice; -- Quantity=0 時回傳 NULL 而非錯誤
2. 將特定值視為 NULL
SELECT NULLIF(Status, 'N/A') FROM Orders; -- 'N/A' 轉為 NULL,利於彙總
3. ISNULL + NULLIF 組合
-- 將 '' 視為 NULL,再給預設值
SELECT ISNULL(NULLIF(Description, ''), '無說明') FROM Products;
效能提示
ISNULL 為內建純量函數,執行計畫中為 Scalar Operator,極輕量。
NULLIF 內部轉為 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END,效能相近。
- 大量資料建議在查詢層處理,避免應用層迴圈判斷。
相容性
- 兩函數皆為 SQL Server 專有 (非 ANSI 標準)。
- 跨資料庫移植請改用
COALESCE、CASE。