在前面介绍的mysql if () 函数 使用嵌套的方式,虽然可以实现类似于switch case功能,但是实现有点繁琐。
这里介绍mysql case()
函数,实现类似于流程控制中的 switch case多分支输出。
语法结构
case 要判断的字段
when 常量1 要显示的值或语句;
when 常量2 要显示的值或语句;
...
else 要显示的值或语句;(相当于default)
end
或者
case
when 要判断的表达式 要显示的值或语句;
when 要判断的表达式 要显示的值或语句;
...
else 要显示的值或语句;(相当于default)
end
例子
还是使用前面mysql if()函数的例子。
例1
在用户表中,有个性别字段gender,其可能的值有3个即,
1 男 2女 3未知
mysql> select id, name,
-> (
-> case gender
-> when '1' then '男'
-> when '2' then '女'
-> when '3' then '未知'
-> end)
-> as gender from user;
+----+--------+--------+
| id | name | gender |
+----+--------+--------+
| 1 | 张三 | 男 |
| 2 | 李四 | 女 |
| 3 | 王五 | 女 |
| 4 | 赵六 | 未知 |
+----+--------+--------+
4 rows in set (0.00 sec)
我们在使用case 函数的时候可以使用()括号将它包起来,这样看起来更加直观。
例2
再举一个学生成绩的例子:
60-70为及格
70-80为中
80-90为良
90-100为优秀
如下所示:
mysql> select id,name,
-> (
-> case
-> when score>=60 and score<70 then '及格'
-> when score>=70 and score<80 then '中'
-> when score>=80 and score<90 then '良'
-> when score>=90 then '优秀'
-> end ) as result
-> from stu_score;
+----+--------+--------+
| id | name | result |
+----+--------+--------+
| 1 | 张三 | 良 |
| 2 | 李四 | 中 |
| 3 | 王五 | 优秀 |
| 4 | 赵六 | 及格 |
+----+--------+--------+
4 rows in set (0.00 sec)