DECODE(expression, search1, result1, search2, result2, ..., default)
IF-THEN-ELSIF-ELSE。SELECT supplier_name,
DECODE(supplier_id, 10000, 'IBM',
10001, 'Microsoft',
10002, 'Hewlett Packard',
'Gateway') AS result
FROM suppliers;
-- 利用日期相減特性
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
-- 更簡潔:配合 SIGN
DECODE(SIGN(date1 - date2), 1, date2, date1)
DECODE 無法直接判斷範圍,需轉換為離散值:
SELECT supplier_id,
DECODE(TRUNC((supplier_id - 1) / 10),
0, 'Category 1',
1, 'Category 2',
2, 'Category 3',
'Unknown') AS grp
FROM suppliers;
公式 TRUNC((id-1)/10) 將 1-10→0、11-20→1、21-30→2...
SELECT emp_name,
DECODE(TRUNC((yrs_of_service + 3) / 4),
0, 0.04,
1, 0.04,
0.06) AS perc_value
FROM employees;
DECODE(SIGN(actual - target),
-1, 'No Bonus',
0, 'Just Made It',
1, 'Congrats!')
ORA-00939,改用 CASE 表達式(無參數上限)。TO_CHAR/TO_NUMBER/TO_DATE。CASE,可讀性更佳且支援複雜邏輯。