sql 中case when 的使用,多case的情况以及else 返回原值的处理
1,表结构:
这里的需求为:查询用户,对于age字段来说如果age大于23的就返回’大于23’;如果age小于23就返回’小于23’;其他情况原值返回。对于sex字段来说为1返回’男’;为2的时候返回’女’,其他情况返回异常。
2,sql案例:
select user_name,birthday,
(case
when age >'23' then '大于23'
when age <'23' then '小于23'
else age
end) age,
(case
when sex ='1' then '男'
when sex='2' then '女'
else '性别错误'
end) sex
from user
3,返回结果:
4,字段为null判断:
select user_name,birthday,age,
(case
when `password` is null then '无密码'
else `password`
end) pwd
from user
返回结果:
5,另外一种写法:
select user_name,birthday,age,
(case sex
when '1' then '男'
when '2' then '女'
else '异常'
end) sex
from user
返回结果:
遇到的问题:
(case
when age >'23' then '大于23'
when age <'23' then '小于23'
else age
end) age --这里自动转成了和上面then后面一致的varchar类型
本表的age定义的是int类型,在 mysql中会自动转成varchar,但是我在postgressql中会报类型错误,需要手动将int转成varchar ,例如:cast(age as varchar)。