今天第一次接触数据库中的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 语句将性别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搜索函数)
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关键字后面没有写要匹配的属性字段 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 语法时,总结如下:
1. 如果使用的是 简单case函数 ,需要在case关键字后面加上需要匹配的属性字段;
2. 如果使用的是 case搜索函数 ,千万不要在case关键字后面加上需要匹配的属性字段,属性字段在when条件判断中直接使用即可。
以上仅代表个人的观点和用法,如有问题请多指点。