如何使用条件判断_mysql if函数用法

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 结构,它只作用于单个表达式计算