case函数的一般有两种用法:
(1)方式一
case 字段名 when 字段值 then 值1 else 值2 end
1
这一种是之前比较常用的一种方式,相当于是大部分编程语言中的switch case的用法,通过字段名,去匹配字段值,适合字段值比较固定的情况下使用,特点是比较简洁易用。
示例:
下面的sql语句就是就是用来判断是好孩子,我们偏爱tom所以我们认为他是好孩子,jack是坏孩子,其他的都是普通孩子
select fname, (
case fname
when 'tom' then '好孩子'
when 'jack' then '坏孩子'
else '普通孩子'
end
) as isgoodchild
from T_person
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(2)方式二
case when 条件 then 值1 else 值2 end
1
这一种应该用过的人比较少一些,一般情况下也不需要使用这种判断方式,如果情况允许的话,最好是在where子句中进行条件筛选,避免数据库不必要的性能消耗。但是一些特殊的情况下还是会用到的。这种用法的特点其他编程语言中的if else条件语句十分相似的 when后面的是一个条件表达式,根据表达式的结果来进行决定是否为then后面的值,使用起来比较灵活,可以适应更多的复杂情况。
示例:
比如下面的sql语句判断一个人的体重是不是正常,如果体重大于50偏重,小于40偏轻,介于40到50之间正常。
select
fname,fweight,(
case
when fweight <40 then 'thin'
when fweight > 50 then 'fat'
else 'ok'
end
) as isnormal
from T_person.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
事实上绝大部分的第一种用法都是可以转换为第二种的形式来写的,但是这样写的时候会显得SQL语句比较繁琐,不易阅读,大部分情况下还是建议使用第一种用法,但遇到无法处理的情况下再使用第二种进行处理。