IFNULL是MySQL中用于将NULL值替换为指定值的函数,语法为IFNULL(expr1, expr2),当expr1为NULL时返回expr2,否则返回expr1;它不处理空字符串或0,常用于报表统计、用户信息展示等场景。

IFNULL函数是MySQL中处理空值(NULL)最直接的工具,它能用指定值替换NULL,避免查询结果出现意外的空数据。
IFNULL函数的基本用法
语法很简单:IFNULL(expr1, expr2)。它的逻辑是:如果expr1不是NULL,就返回expr1;如果是NULL,就返回expr2。
- expr1 可以是字段名、表达式或常量
- expr2 必须与expr1兼容的数据类型(比如都是数字或都是字符串)
- 该函数只判断第一个参数是否为NULL,不处理空字符串('')或0
常见应用场景举例
实际开发中,这些地方经常需要IFNULL:
- 报表统计时,把NULL销量替换成0,避免SUM或图表显示异常
- 用户信息展示,当手机号为空时显示“暂未填写”
- 价格计算中,折扣字段为NULL时按0处理,防止总价出错
- 联表查询后,右表字段可能为NULL,用IFNULL统一兜底
注意和NULL相关的几个细节
MySQL中NULL有特殊性,容易踩坑:
- 不能用 = NULL 或 != NULL 判断,必须用 IS NULL 或 IS NOT NULL
- 任何值与NULL做运算(如 5 + NULL)结果仍是NULL
- IFNULL只替换NULL,对空字符串('')、0、'0'等非NULL值无效
- 如果想同时处理NULL和空字符串,可用嵌套:IFNULL(NULLIF(trim(col), ''), '默认值')
替代方案对比
除了IFNULL,还有两个常用函数可实现类似效果:
- COALESCE(expr1, expr2, ..., exprN):返回第一个非NULL的表达式,支持多个参数,更通用
- CASE WHEN ... THEN ... ELSE ... END:逻辑更灵活,适合复杂条件判断,但写法稍长
- IFNULL效率略高,因为只接受两个参数,内部优化更直接










