在前面介绍的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)