MySQL数据库的CASE函数是一种条件表达式,它允许您根据不同的条件对数据进行不同的处理。CASE函数在查询中非常有用,它可以根据满足特定条件的数据来选择、过滤、转换或排序数据。下面我们将详细介绍MySQL数据库CASE函数的语法、案例和注意事项。
CASE函数的语法可以分为两种形式:简单CASE函数和搜索CASE函数。
简单CASE函数的基本语法如下:
CASE <表达式> WHEN <表达式值1>THEN <结果1> ... WHEN <表达式值n> THEN <结果n> ELSE <默认结果> END
语法说明:<>是中文解释。
<表达式>:是要评估的表达式。
<表达式值1>: 等是可能的表达式结果。
<结果1>: 等是在满足相应条件时返回的结果。
ELSE:是可选的,用于指定当没有任何条件为真时的默认结果。
搜索CASE函数的基本语法如下:
CASE WHEN <条件表达式1> THEN <结果1> ... WHEN <条件表达式n> THEN <结果n> ELSE <默认结果> END
语法说明:<>是中文解释。
<条件表达式1>:是条件表达式,它们返回一个布尔值。
<结果1>: 是当相应的条件为真时返回的结果。。
ELSE:是可选的,用于指定当没有任何条件为真时的默认结果。
下面是一个使用CASE函数进行数据转换的案例:
mysql>SELECT CASE WEEKDAY(NOW()) WHEN 0 THEN '星期一' WHEN 1 THEN '星期二' WHEN 2 THEN '星期三' WHEN 3 THEN '星期四' WHEN 4 THEN '星期五' WHEN 5 THEN '星期六' ELSE '星期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW()); +-----------+---------------------+----------------+----------------+ | COLUMN1 | NOW() | WEEKDAY(NOW()) | DAYNAME(NOW()) | +-----------+---------------------+----------------+----------------+ | 星期三 | 2023-09-27 11:18:10 | 2 | Wednesday | +-----------+---------------------+----------------+----------------+ 1 row in set (0.04 sec)
由执行结果可以看出,NOW() 函数得到当前系统时间是 2023 年 9 月 27 日,DAYNAME(NOW()) 得到当天是 'Thursday ',WEEKDAY(NOW()) 函数返回当前时间的工作日索引是 2,即对应的是星期三。
通过students搜素grade评分字段输出想要的结果
新建案例表
DROP TABLE IF EXISTS `students`; CREATE TABLE `students` ( `id` int(11) NOT NULL, `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, `age` int(11) DEFAULT NULL, `grade` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
接下来,我们插入一些原始数据到 students 表格中。
INSERT INTO `students` VALUES ('1', 'Alice', '20', '93'); INSERT INTO `students` VALUES ('2', 'Bob', '19', '82'); INSERT INTO `students` VALUES ('3', 'Charlie', '21', '40'); INSERT INTO `students` VALUES ('4', 'David', '18', '81'); INSERT INTO `students` VALUES ('5', 'Eve', '22', '55');
处理前数据:
+----+---------+------+-------+ | id | name | age | grade | +----+---------+------+-------+ | 1 | Alice | 20 | 93 | | 2 | Bob | 19 | 82 | | 3 | Charlie | 21 | 40 | | 4 | David | 18 | 81 | | 5 | Eve | 22 | 55 | +----+---------+------+-------+
Mysql语句及结果:
SELECT *, CASE WHEN grade >=85 THEN '优秀' WHEN grade >=60 THEN '及格' ELSE '不及格' END as grade2 FROM students;
+----+---------+------+-------+-----------+ | id | name | age | grade | grade2 | +----+---------+------+-------+-----------+ | 1 | Alice | 20 | 93 | 优秀 | | 2 | Bob | 19 | 82 | 及格 | | 3 | Charlie | 21 | 40 | 不及格 | | 4 | David | 18 | 81 | 及格 | | 5 | Eve | 22 | 55 | 不及格 | +----+---------+------+-------+-----------+ 5 rows in set (0.01 sec)
也可以使用条件表达式中也可以使用BETWEEN语句
SELECT *, CASE WHEN grade BETWEEN 85 AND 100 THEN '优秀' WHEN grade BETWEEN 60 AND 84 THEN '及格' ELSE '不及格' END as grade2 FROM students;
![]() | CASE函数和SELECT使用要用AS别名语句进行列名的输出,且不能表里面存在的列名相同,否则会报错。 |
1. CASE表达式必须以一个表达式开始,然后是若干个WHEN子句和一个可选的ELSE子句。在简单CASE函数中,必须指定一个表达式;在搜索CASE函数中,可以省略表达式。
2. 在简单CASE函数中,可以使用多个表达式,但它们必须被括号括起来,例如:CASE (expression1, expression2) WHEN (value1, value2) THEN result1 ELSE result2 END。
3. 在搜索CASE函数中,可以使用多个条件表达式,但它们必须被括号括起来,例如:CASE WHEN condition1 AND condition2 THEN result1 ELSE result2 END。
4. 在使用搜索CASE函数时,如果多个条件都为真,则只返回第一个匹配的条件的结果。如果您希望返回所有匹配的条件的结果,可以使用简单CASE函数。
5. 在使用CASE函数时,请注意处理NULL值。如果CASE表达式中的任何表达式返回NULL值,则整个表达式的值也将为NULL。如果您希望在处理NULL值时返回一个替代值,可以使用COALESCE函数或IFNULL函数。