在 Oracle 中,**CASE WHEN** 和 **DECODE** 都是用于实现条件判断和分支逻辑的表达式。下面是详细的语法说明、用法对比和示例解析。
🔶 一、CASE WHEN 表达式(标准 SQL 语法)
✅ 语法一:简单 CASE 表达式
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
✅ 语法二:搜索 CASE 表达式(更灵活)
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
🎯 示例:
SELECT employee_id,
salary,
CASE
WHEN salary >= 10000 THEN '高收入'
WHEN salary >= 5000 THEN '中收入'
ELSE '低收入'
END AS 收入等级
FROM employees;
🔍 说明:
- 使用
CASE实现多条件判断; - 可以处理范围比较、复杂逻辑;
- 最后一个
ELSE是可选的,如果不写,默认返回NULL。
🔷 二、DECODE 函数(Oracle 专有写法)
✅ 语法:
DECODE(expr, search1, result1, search2, result2, ..., default_result)
🎯 示例:
SELECT job_id,
DECODE(job_id,
'IT_PROG', '程序员',
'HR_REP', '人力资源',
'销售') AS 职位名称
FROM employees;
🔍 说明:
- 如果
job_id = 'IT_PROG',返回'程序员'; - 如果
job_id = 'HR_REP',返回'人力资源'; - 否则返回
'销售'(默认值)。
🔄 CASE 与 DECODE 的对比总结:
| 特性 | CASE WHEN | DECODE |
|---|---|---|
| 是否标准SQL | ✅ 是标准 SQL | ❌ Oracle 专有 |
| 比较操作类型 | 可进行任何条件判断(范围、表达式) | 只能做等值比较 |
| 可读性 | 更清晰,支持嵌套 CASE | 适合简单的值匹配 |
| 是否支持嵌套 | ✅ 支持 | ✅ 支持,但可读性差 |
| 使用建议 | 多条件判断时推荐使用 | 简单值匹配时更简洁 |
✅ 示例对照:
1. 使用 CASE WHEN 判断工资等级:
SELECT employee_id,
salary,
CASE
WHEN salary >= 15000 THEN 'A类'
WHEN salary >= 10000 THEN 'B类'
ELSE 'C类'
END AS 工资等级
FROM employees;
2. 使用 DECODE 实现类似功能:
SELECT employee_id,
DECODE(salary,
15000, 'A类',
10000, 'B类',
'C类') AS 工资等级
FROM employees;
📝 限制:DECODE 不能做 >= 或 < 等范围判断。

4万+

被折叠的 条评论
为什么被折叠?



