SQL中case when语句的两种用法

case函数,严格的意义上来说case函数已经试流程控制语句了,不是简单意义上的函数,不过为了方便,不少人将case函数称为流程控制函数。web

case函数的通常有两种用法:sql

(1)方式一

case 字段名 when 字段值 then 值1 else 值2 end

这一种是以前比较经常使用的一种方式,至关因而大部分编程语言中的switch case的用法,经过字段名,去匹配字段值,适合字段值比较固定的状况下使用,特色是比较简洁易用。
示例:数据库

下面的sql语句就是就是用来判断是好孩子,咱们偏心tom因此咱们认为他是好孩子,jack是坏孩子,其余的都是普通孩子

select fname, (

case fname

when 'tom' then '好孩子'

when 'jack' then '坏孩子'

else '普通孩子'

end

) as isgoodchild

from T_person

(2)方式二

case when 条件 then 值1 else 值2 end

这一种应该用过的人比较少一些,通常状况下也不须要使用这种判断方式,若是状况容许的话,最好是在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.

事实上绝大部分的第一种用法都是能够转换为第二种的形式来写的,可是这样写的时候会显得SQL语句比较繁琐,不易阅读,大部分状况下仍是建议使用第一种用法,若是遇到没法处理的状况下再使用第二种进行处理。编程语言