(一)概述:
-
case when:条件判断语句
(1) 相当于其它语言中的 if else
(2) 部分情况下,等同于 decode() -
case when 表达式用两种形式
– 简单 case 函数,要求:when 对象的类型 和 case 对象的类型一致
– 此时等同于 decode(sex, ‘1’, ‘男’, ‘2’, ‘女’)
case sex
when ‘1’ then ‘男’
when ‘2’ then ‘女’
else ‘其它’
end;– case 表达式
case
when sex = ‘1’ then ‘男’
when sex = ‘2’ then ‘女’
else ‘其它’
end; -
注意:when 的执行顺序,当 ‘第一个’ when 满足条件时,便结束查询
(不会继续判断其它的 when 条件) -
建议:当 case when 和 decode 等价,且判断语句不超过 10 行时,
使用 decode(语法简洁)
(二)示例
1.简单的case表达式
SELECT
CASE 列名
WHEN 值1 THEN 結果1
WHEN 值2 THEN 結果2
ELSE 结果3
END
FROM table1;
2.作为WHERE后的多条件判断
SELECT
*
FROM
"PeopleInfo"
WHERE
( CASE WHEN AGE = 18 AND SEX = 0 THEN 1 WHEN AGE = 19 AND SEX = 1 THEN 2 ELSE 0 END) = 1
(三)报错
ORA-06592: 执行 CASE 语句时未找到 CASE
在 Oracle 中,若省略 else 子句,当存在不符合的条件时,默认为 null
在 PL/SQL 中,若省略 else 子句,当存在不符合的条件时,直接 报错!