数据库 case when then else end 操作

时间:2023-01-30 23:29:09

今天第一次接触数据库中的case when then else end语法,踩了个坑,折腾了两个小时才找到原因,在此分享一下!!!

首先,在MySQL中创建一张数据库表t_user,其中属性包括

属性 类型
u_id int
u_name varchar
u_age int
u_gender varchar
u_grade int

在数据库中插入如下数据:

insert into t_user(u_name , u_age , u_gender , u_grade) values('张三' , 20 , 1 , 80) ;
insert into t_user(u_name , u_age , u_gender , u_grade) values('李四' , 30 , 2 , 80) ;
insert into t_user(u_name , u_age , u_gender , u_grade) values('王五' , 40 , 3 , 80) ;
insert into t_user(u_name , u_age , u_gender , u_grade) values('老王' , 50 , 1 , 80) ;
insert into t_user(u_name , u_age , u_gender , u_grade) values('name_1' , 60 , 2 , 80) ;
insert into t_user(u_name , u_age , u_gender , u_grade) values('name_2' , 70 , 3 , 80) ;
insert into t_user(u_name , u_age , u_gender , u_grade) values('name_3' , 80 , 1 , 80) ;

查询数据库中的内容如下:

select * from t_user ;

数据库 case when then else end 操作

查询表中的内容,并使用case when 语句将性别1 2 3 转换为 男、女或其他:

案例一:(简单case函数)

select  u_id 'ID' , u_name '姓名' , u_age '年龄' ,
case u_gender
when  1 then '男' 
when  2 then '女'
else '其他' end '性别' ,
u_grade '成绩'
from t_user ;

结果一:

数据库 case when then else end 操作


案例二:(case搜索函数)

select  u_id 'ID' , u_name '姓名' , u_age '年龄' ,
case
when u_gender = 1 then '男' 
when u_gender = 2 then '女'
else '其他' end '性别' ,
u_grade '成绩'
from t_user ;

结果二:

数据库 case when then else end 操作


在这里案例一和案例二的方法是等价的,但是请注意,在方法二的case关键字后面没有写要匹配的属性字段 u_gender!!!!这才是重点。。。


如果在方法二中加上属性字段会怎样???

案例三:

select  u_id 'ID' , u_name '姓名' , u_age '年龄' ,
case u_gender
when u_gender = 1 then '男' 
when u_gender = 2 then '女'
else '其他' end '性别' ,
u_grade '成绩'
from t_user ;

结果三:

数据库 case when then else end 操作

这个结果比较奇怪!!!我也没搞懂为什么会这样!!!


使用 case when 语法时,总结如下:

1. 如果使用的是 简单case函数 ,需要在case关键字后面加上需要匹配的属性字段;

2. 如果使用的是 case搜索函数 ,千万不要在case关键字后面加上需要匹配的属性字段,属性字段在when条件判断中直接使用即可。


以上仅代表个人的观点和用法,如有问题请多指点。