COALESCE
在日常 SQL 开发中,经常会遇到 空值(NULL) 的问题:比如某列可能没有数据,我们希望用一个默认值替代它。
MySQL 提供了很多处理空值的函数,比如 IFNULL()、ISNULL(),但是如果你有 多个候选值,哪个最先有值就用哪个呢?这时候就轮到 COALESCE 上场了!
1. COALESCE 是什么?
Section titled “1. COALESCE 是什么?”COALESCE(expr1, expr2, ..., exprN) 会依次检查传入的表达式,返回 第一个非 NULL 的值。
-
如果所有表达式都是 NULL,则返回 NULL。
-
可以处理多个参数,比
IFNULL()灵活得多。
通俗理解: 想象你有几个水杯,第一个空的就跳过,找到第一个有水的就喝掉。COALESCE 就像你在挑水杯,只要有水就喝,不浪费时间。
SELECT COALESCE(NULL, NULL, '默认值', '其他值');-- 结果: '默认值'
SELECT COALESCE(NULL, 123, 456);-- 结果: 123在第一个例子中,前两个参数都是 NULL,第三个 '默认值' 是第一个非 NULL 值,所以返回它。
在第二个例子中,第一个 NULL 被跳过,返回了 123。
3. 应用场景
Section titled “3. 应用场景”- 多列取有效值
假设有一个用户表,有三个联系方式字段:mobile、phone、email,我们希望优先显示第一个非空联系方式:
SELECT name, COALESCE(mobile, phone, email, '暂无联系方式') AS contactFROM user;-
用户有手机号就显示手机号
-
没有手机号但有座机就显示座机
-
都没有就显示
'暂无联系方式'
- 避免除零错误
SELECT 10 / COALESCE(NULLIF(divisor,0), 1) AS resultFROM my_table;-
先用
NULLIF把 0 转成 NULL -
再用
COALESCE给一个兜底值 1 -
这样就避免了除零报错