Oracle 中的 CASE WHEN 表达式详解
本文首次创作于 2025-06-16,最后更新于 2025-06-16,距离上次更新已经过了 179 天,文章内容可能已经过时。
Oracle 中的 CASE WHEN 表达式详解
在 Oracle SQL 中,CASE 表达式用于基于某些条件返回不同的值,是实现条件判断的常用工具。它广泛应用于 SELECT、UPDATE、ORDER BY 等语句中,使 SQL 语句更具灵活性和可读性。
一、CASE 表达式的基本语法
Oracle 支持两种形式的 CASE 表达式:
1. 简单 CASE 表达式(Simple CASE)
用于对某个表达式进行等值判断:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END2. 搜索型 CASE 表达式(Searched CASE)
用于执行复杂的逻辑判断(更常用):
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END二、使用示例
示例 1:员工性别判断(使用 MOD 判断奇偶)
SELECT empno,
ename,
CASE
WHEN MOD(empno, 2) = 1 THEN '男'
ELSE '女'
END AS gender_guess
FROM emp;说明:假设 empno 为奇数表示“男”,偶数表示“女”。
示例 2:工资等级分类
SELECT ename,
sal,
CASE
WHEN sal >= 5000 THEN '高薪'
WHEN sal >= 3000 THEN '中薪'
ELSE '低薪'
END AS sal_level
FROM emp;示例 3:判断入职月份属于上半年还是下半年
SELECT ename,
hiredate,
CASE
WHEN TO_CHAR(hiredate, 'MM') BETWEEN '01' AND '06' THEN '上半年'
WHEN TO_CHAR(hiredate, 'MM') BETWEEN '07' AND '12' THEN '下半年'
ELSE '未知'
END AS 入职时期
FROM emp;示例 4:ORDER BY 中使用 CASE
SELECT ename, job
FROM emp
ORDER BY CASE job
WHEN 'MANAGER' THEN 1
WHEN 'ANALYST' THEN 2
WHEN 'CLERK' THEN 3
ELSE 4
END;说明:自定义职位排序规则。
三、CASE 与 DECODE 对比
四、注意事项
CASE表达式不能跨多个列直接判断,需要显式表达每个条件。CASE表达式最后最好加ELSE,防止无匹配时返回NULL。CASE表达式可以用于几乎所有 SQL 场合(如SELECT、UPDATE、WHERE、ORDER BY等)。
五、总结
CASE WHEN 表达式是 SQL 中非常实用的条件判断工具,能有效提升 SQL 的逻辑能力与灵活性。对于复杂的业务规则判断、分级、标签分类等场景,CASE 是首选方式。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Noah
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果
