sql case when使用记录

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值