MySQL的IF函数是二分支条件函数,语法为IF(expr1,expr2,expr3),仅支持真/假判断,不支持多分支,不可替代存储过程中的IF语句。

MySQL 中的 IF 函数是一个简单的条件判断函数,用于在 SQL 查询中根据条件返回不同值,**不支持多分支逻辑(如 ELSE IF),也不等同于存储过程中的 IF 语句**。
IF 函数基本语法
IF(expr1, expr2, expr3)
- 如果 expr1 为真(非 0 且非 NULL),返回 expr2
- 否则(expr1 为 0、NULL 或 FALSE),返回 expr3
注意:expr1 是布尔表达式,但 MySQL 会自动将数值、字符串甚至 NULL 转换为逻辑值判断。
常见使用场景与写法示例
常用于 SELECT 查询中动态生成字段值,比如对成绩分级、订单状态标识、空值替换等:
- 把分数转为等级:
SELECT score, IF(score >= 60, '及格', '不及格') AS result FROM students; - 处理 NULL 值:
SELECT IF(name IS NULL, '未知', name) AS real_name FROM users; - 结合其他函数使用:
SELECT IF(LENGTH(phone) = 11, '有效', '无效') FROM contacts;
IF 和 CASE WHEN 的区别
IF 是函数,只能做二选一判断;CASE WHEN 支持多分支,更灵活:
- IF 适合简单开关逻辑(是/否、有/无、达标/未达标)
- CASE WHEN 更适合多级分类,例如:
CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END - IF 可以嵌套(
IF(..., ..., IF(...))),但嵌套过深可读性差,建议优先用 CASE
注意事项和易错点
实际使用时容易忽略这些细节:
-
NULL 判断要小心:直接写
IF(col = NULL, ...)永远为 FALSE,应改用IF(col IS NULL, ...) -
类型隐式转换可能出错:比如
IF('abc', 1, 0)返回 1(非空字符串转为 TRUE),但IF('', 1, 0)返回 0(空字符串转为 FALSE) - 不能用于控制流程:IF 函数不能替代存储过程里的 IF...THEN...ELSE 结构,它只作用于单个表达式计算










