MySQL CASE函数
admin 阅读:135 2024-03-01
本文基于MySQL 8.0版本
https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#operator_case
语法
CASE value WHEN compare_value THEN result [WHEN compare_value THEN result ...] [ELSE result] END
CASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE result] END说明
MySQL CASE函数是MySQL流程控制函数的一种,上面两种语法分别对应两种不同的方式:第一种语法返回第一个value=compare_value为true的结果。第二种语法返回第一个condition为true的结果。如果没有比较或条件为真,则返回ELSE之后的结果,如果没有ELSE部分,则返回NULL。
CASE表达式的返回类型是所有结果值的聚合类型:
- 如果所有类型都是数字,则聚合类型也是数字:
- 如果至少一个参数是双精度,则结果是双精度。
- 否则,如果至少有一个参数是
DECIMAL,则结果是DECIMAL。 - 否则,结果是整数类型(有一个例外):
- 如果所有整数类型都是有符号的或都是无符号的,则结果是相同的符号并且精度是所有指定整数类型(即
TINYINT、SMALLINT、MEDIUMINT、INT或者BIGINT) 中最高的。 - 如果是有符号和无符号整数类型的组合,结果是有符号的,精度可能更高。例如,如果类型分别为有符号的
INT和 无符号INT,则结果为有符号的BIGINT。 - 例外的情况是无符号的
BIGINT,与任何有符号的整数类型相结合。结果 都是具有足够的精度和小数位数 0 的DECIMAL。
- 如果所有整数类型都是有符号的或都是无符号的,则结果是相同的符号并且精度是所有指定整数类型(即
- 如果所有类型都是
BIT,则结果是BIT。否则BIT参数的处理方式类似于BIGINT。 - 如果所有类型都是
YEAR,则结果是YEAR。否则YEAR参数的处理方式类似于INT。 - 如果所有类型都是字符串(
CHAR或VARCHAR),则结果是VARCHAR,最大长度由操作数的最长字符长度决定。 - 如果所有类型都是字符或二进制字符串,则结果为
VARBINARY. SET和ENUM的处理与VARCHAR类似,结果是VARCHAR。- 如果所有类型都是
JSON,则结果是JSON。 - 如果所有类型都是时间型的,则结果是时间型的:
- 如果所有时间类型均为
DATE、TIME或TIMESTAMP,则结果分别为DATE、TIME或TIMESTAMP。 - 否则,如果是时间类型的混合,结果是
DATETIME.
- 如果所有时间类型均为
- 如果所有类型都是
GEOMETRY,则结果是GEOMETRY。 - 如果任何类型是
BLOB,则结果是BLOB。 - 对于所有其他类型组合,结果为
VARCHAR。 NULL类型聚合忽略 文字操作数。
示例
mysql> SELECT CASE url WHEN 'www.codesou.cn' THEN '码农资源网' WHEN 'www.duanpianmi.com' THEN '短篇迷' ELSE '位置网站' END;
mysql> SELECT CASE WHEN score >= 85 THEN '优秀' WHEN score >= 60 and score < 85 THEN '及格' ELSE '差' END;
注意
在MySQL中还存在着同名的
CASE流程控制语句,与本文讲解的CASE函数不同,CASE流程控制语句应用于存储过程,并且不包含ELSE NULL子句,并且用END CASE而不是END来结束。
声明
1、部分文章来源于网络,仅作为参考。 2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!





