sql case when使用记录

sql 中case when 的使用,多case的情况以及else 返回原值的处理

1,表结构:
sql case when使用记录_第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,返回结果:

sql case when使用记录_第2张图片

4,字段为null判断:

select user_name,birthday,age,
(case
when  `password` is null then '无密码'
else `password`
end) pwd
from user

返回结果:
sql case when使用记录_第3张图片

5,另外一种写法:

select user_name,birthday,age,
(case sex
when '1' then '男'
when '2' then '女'
else '异常'
end) sex
from user

返回结果:
sql case when使用记录_第4张图片

遇到的问题:

(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)。

你可能感兴趣的:(笔记)