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' ENDIF 可以嵌套(
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 结构,它只作用于单个表达式计算
