一、两种形式的case when
形式一:
case 列名
when 条件值1 then 符合条件1后的值
when 条件值2 then 符合条件2后的值
……
else 默认值 end
eg:
如下,gender 值为1时,显示男,2显示女,否则显示其他
SELECT id,NAME,
CASE
gender
WHEN gender = '1' THEN
'男'
WHEN gender = '2' THEN
'女' ELSE '其他'
END AS gender,
account
FROM T_USER
查询结果:
结论:
case 列名 when ……这种形式中when后面的条件是针对when前面的列名的,即就是仅对某一列进行条件判断查询
形式二:
case
when 列名= 条件值1 then 符合条件1后的值
when 列名=条件值2 then 符合条件2后的值
……
else 默认值 end
eg:
如下,gender 值为1时,显示男,2显示女,否则显示其他
SELECT id,NAME,
CASE
WHEN gender = '1' THEN
'男'
WHEN gender = '2' THEN
'女' ELSE '其他'
END AS gender,
account
FROM T_USER
查询结果:
结论:
case when 列名 ……这种形式中when后面的条件是针对when后面的列名,即就是针对where条件后查询
小纠结:
之前一直以为when后面的列名可以是不同的(写不同时也不报错),如下图,结果发现根本没啥用。现在想清楚了,case when的查询结果就是一个字段,即使用了多个字段也只能用一个字段来接值,所以, case when 列名……这种形式后面还是要跟同一个列名
二、decode(不支持mysql)
形式:
decode(value,if1,then1,if2,then2,if3,then3,...,else)
解读:
if(条件1成立){
return value1
}else if(条件2成立){
return value2
}else if(){
……
}else{
return defaultVaule
}
eg:
如下,SUPER_ADMIN 值为1时,显示admin,2显示管理员,否则显示其他
SELECT id,username,
DECODE(SUPER_ADMIN, '1', 'admin','2','管理员','其他') as rank
from T_USER_INFO
查询结果:
结论:
1、MySql不能使用,可用case ... when替代;
2、decode中的条件一般都是对decode函数中第一个字段条件判断
三、case ... when 和decode
1、作用:都可以用来对表中字段值和实际需要值的转换(根据不同的条件赋值),实际使用中可替换
2、兼容性:decode在mySQL中不可用,case ... when 在mySQl和Oracle中均可用