MySQL 空值处理函数对比:IFNULL、COALESCE 和 NULLIF
IFNULL
、COALESCE
和 NULLIF
这三个函数都是 MySQL 中处理 NULL 值的函数,但它们的功能和使用场景有所不同:
1. IFNULL(expr, fallback)
功能:两值处理,专为替换 NULL 设计
- 如果
expr
不是 NULL,返回expr
- 如果
expr
是 NULL,返回fallback
特点:
- 只能处理一个表达式是否为 NULL 的情况
- 只能提供一个备用值
示例:
SELECT IFNULL(NULL, '备用值'); -- 返回 '备用值'
SELECT IFNULL('实际值', '备用值'); -- 返回 '实际值'
典型用途:
- 显示用户昵称,如果为 NULL 则显示"匿名用户"
SELECT IFNULL(nickname, '匿名用户') FROM users;
2. COALESCE(expr1, expr2, ...)
功能:多值选择,返回参数列表中第一个非 NULL 的值
特点:
- 可以接受多个参数(至少两个)
- 从左到右检查,返回第一个非 NULL 值
- 如果所有参数都是 NULL,则返回 NULL
示例:
SELECT COALESCE(NULL, NULL, '第三个值', '第四个值'); -- 返回 '第三个值'
SELECT COALESCE(NULL, NULL, NULL); -- 返回 NULL
典型用途:
- 优先显示多种联系方式中的有效信息
SELECT COALESCE(mobile, home_phone, work_phone, '无联系方式') FROM contacts;
3. NULLIF(expr1, expr2)
功能:相等性判断,用于特定情况返回 NULL
特点:
- 比较两个表达式
- 如果相等则返回 NULL
- 如果不相等则返回第一个表达式
示例:
SELECT NULLIF(5, 5); -- 返回 NULL
SELECT NULLIF(5, 10); -- 返回 5
典型用途:
- 安全除法(防止除以零)
SELECT amount / NULLIF(total, 0) FROM accounts;
对比总结表
函数 | 参数数量 | 返回值规则 | 典型用途 |
---|---|---|---|
IFNULL(expr, fallback) | 2 | expr非NULL则返回expr,否则返回fallback | 单个NULL值替换 |
COALESCE(expr1, expr2,...) | ≥2 | 返回第一个非NULL参数 | 多备选值选择 |
NULLIF(expr1, expr2) | 2 | expr1=expr2返回NULL,否则返回expr1 | 安全计算,特定条件返回NULL |
使用建议
- 当只需要处理单个可能为NULL的字段时 → 用IFNULL
- 当有多个备选字段需要依次检查时 → 用COALESCE
- 当需要特定条件下返回NULL时 → 用NULLIF
- 注意:在复杂表达式中,这些函数可能会影响性能,应合理使用