COALESCE函数返回参数中第一个非NULL值,按从左到右顺序检查,遇非NULL即返回,全为NULL则返NULL,是标准SQL中处理空值最简洁通用的方式。

COALESCE() 是 SQL 中处理 NULL 值最常用、也最安全的函数之一。它按顺序检查参数列表,返回第一个非 NULL 的值;如果所有参数都是 NULL,则返回 NULL。它不依赖数据库方言(标准 SQL),在 PostgreSQL、MySQL、SQL Server、Oracle、SQLite 等主流数据库中都可用。
COALESCE 的基本用法和执行逻辑
COALESCE 接收两个或更多表达式,从左到右逐个判断是否为 NULL:
- 遇到第一个非 NULL 值立即返回,不再继续检查后续参数;
- 所有参数均为 NULL 时,结果为 NULL;
- 所有参数必须是兼容的数据类型(例如不能混用字符串和日期而不做显式转换)。
示例:
SELECT COALESCE(NULL, '备用名', '默认名') AS name;→ 返回 '备用名'(因为第二个参数非 NULL)。
用 COALESCE 替换查询字段中的 NULL
常用于 SELECT 子句中对可能为空的列提供默认值,避免前端或报表显示空白:
- 替换姓名字段空值:COALESCE(customer_name, '未知客户');
- 补全价格空值(保留数值类型):COALESCE(unit_price, 0.00);
- 拼接地址时防中断:COALESCE(street, '') || ', ' || COALESCE(city, '')(注意:不同数据库字符串拼接符不同,PostgreSQL 用
||,MySQL 用CONCAT())。
与 CASE WHEN 对比:为什么优先选 COALESCE?
COALESCE 本质是简化的、专用于 NULL 判断的 CASE 表达式。下面两写法等价:
COALESCE(a, b, c)等同于:
CASE WHEN a IS NOT NULL THEN a WHEN b IS NOT NULL THEN b ELSE c END优势在于:
- 更简洁、可读性高,尤其参数较多时;
- 无需重复写
IS NOT NULL判断; - 数据库优化器通常对 COALESCE 有更好支持,执行效率略优。
注意事项和常见陷阱
使用 COALESCE 时需留意以下细节:
- 类型隐式转换风险:如 COALESCE(int_col, 'N/A') 在某些数据库中会报错(整型 vs 字符串),应统一类型,例如:COALESCE(CAST(int_col AS TEXT), 'N/A');
- 不适用于条件逻辑分支:COALESCE 只判断是否为 NULL,不能替代完整条件判断(比如“价格 > 100 才显示折扣”),此时仍需用 CASE;
- 性能影响极小但存在:对超大表每行计算 COALESCE 几乎无开销,但若嵌套多层或配合复杂子查询,建议结合索引和执行计划评估。










