case [<表达式>]

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