when <表达式条件值1> then <满足条件时返回值1>
[when <表达式条件值2> then <满足条件时返回值2>
……
[else <不满足上述条件时返回值>]]
end
【功能】当:<表达式>=<表达式条件值1……n> 时,返回对应 <满足条件时返回值1……n>
当<表达式条件值1……n>不为条件表达式时,与函数decode()相同,
decode(<表达式>,<表达式条件值1>,<满足条件时返回值1>,<表达式条件值2>,<满足条件时返回值2> ……,<不满足上述条件时返回值>)
【参数】
<表达式> 默认为true (逻辑型)
<表达式条件值1……n> 类型要与<表达式>类型一致,
若<表达式>为字符型,则<表达式条件值1……n>也要为字符型
【注意点】
1、以CASE开头,以END结尾
2、分支中WHEN 后跟条件,THEN为显示结果
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加
4、END 后跟别名
5、只返回第一个符合条件的值,剩下的when部分将会被自动忽略,得注意条件先后顺序
【示例】
建立环境:
create table xqb (xqn number(1,0)); insert into xqb xqn values(1); insert into xqb xqn values(2); insert into xqb xqn values(3); insert into xqb xqn values(4); insert into xqb xqn values(5); insert into xqb xqn values(6); insert into xqb xqn values(7); commit;
查询结果:
SELECT xqn, CASE WHEN xqn = 1 THEN '星期一' WHEN xqn = 2 THEN '星期二' WHEN xqn = 3 THEN '星期三' else '星期三以后' END 星期 FROM xqb 另类写法 SELECT xqn, CASE xqn WHEN 1 THEN '星期一' WHEN 2 THEN '星期二' WHEN 3 THEN '星期三' else '星期三以后' END 星期 FROM xqb
decode正确表达:
SELECT xqn, decode(xqn,1,'星期一',2,'星期二',3,'星期三','星期三以后') 星期 FROM xqb decode错误表达: SELECT xqn, decode(TRUE,xqn=1,'星期一',xqn=2,'星期二',xqn=3,'星期三','星期三以后') 星期 FROM xqb 组合条件表达: SELECT xqn, CASE WHEN xqn <= 1 THEN '星期一' WHEN xqn <= 2 THEN '星期二' --条件同:not(xqn<=1) and xqn<=2 WHEN xqn <= 3 THEN '星期三' --条件同:not(xqn<=1 and xqn<=2) and xqn<=3 else '星期三以后' END 星期 FROM xqb