DECODE 是 Oracle 專有的條件轉換函數,語法簡潔、可讀性高,常用於將編碼值轉換為可讀標籤、實現簡易 CASE 邏輯。
DECODE(表達式, 條件值1, 結果值1, 條件值2, 結果值2, ..., 預設值)
等同於:
IF 表達式 = 條件值1 THEN 結果值1 ELSIF 表達式 = 條件值2 THEN 結果值2 ... ELSE 預設值 END IF
-- 銷售等級轉換
SELECT month_id,
DECODE(sale_amt,
1000, 'D',
2000, 'C',
3000, 'B',
4000, 'A',
'Other') AS sale_grade
FROM output;
SELECT month_id,
DECODE(sale_amt, NULL, '---', sale_amt) AS sale_amt
FROM output;
-- 若 sale_amt 為 NULL 則視為 6000
SELECT month_id,
DECODE(NVL(sale_amt, 6000), 6000, 'NG', 'OK') AS status
FROM output;
-- 回傳 sale_amt 與 6000 中較小者
SELECT month_id,
DECODE(SIGN(sale_amt - 6000), -1, sale_amt, 6000) AS min_val
FROM output;
| 特性 | DECODE | CASE |
|---|---|---|
| 可讀性 | 簡單等值判斷極佳 | 支援範圍、複合條件 |
| NULL 比較 | 可直接匹配 NULL | 需用 IS NULL |
| 可移植性 | Oracle 專有 | ANSI 標準,跨資料庫 |
CASE WHEN。