我的业务需求说明:
开发中,需要编写一个sql查询数据,其中A表中的某个字段的具体值需要和B(一个字典表)
表进行联查,而恰巧A表中的此字段是逗号分开的格式,类似 109901,109902 因此,在查
询过程中需要判断此字段是否为此种情况,使用case when语句。
case when 有两种使用方式:
- 字段需要判断符进行判断(case 搜索)
CASE
when age > 18
then
'sql或者字符返回值'
else
'sql或字符返回值'
END
/* CASE when age > 18 then 'sql或者字符返回值' else 'sql或字符返回值' END */
- 不需要运算符判断的
如果不需要运算符判断,则需要使用case后面指定字段名字,类似于Java中switch的语法
CASE sex
WHEN '1' THEN '男生'
WHEN '2' THEN '女生'
ELSE '其他' END
/* CASE sex WHEN '1' THEN '男生' WHEN '2' THEN '女生' ELSE '其他' END */
– case when 最后总需要’end’去结束!
– case sex … 会使用sex的值直接和when后的值比较,因此case 指定字段后 when后面切不可写判断符 如: case sex when sex = ‘xx’ then … 这种形式
– 无论使用那种方式,如果写了多个when xx then xx, 当一个满足条件后,将自动跳出,后方的when将不会执行,如下所示:
select s.*,
(case sex
when 2
then '男'
when 2
then '女'
else
'未填写'
end) xb
from student s;
两个when都在判断sex为2时的值,如果此sql执行 所有sex=2的数据都将返回男;