【mysql】ISNULL、NVL、IFNULL和COALESCE函数的使用方法
·
以下是 ISNULL、NVL、IFNULL 和 COALESCE 函数的详细使用方法:
1. ISNULL
SQL Server 和 Sybase 使用 ISNULL 函数来处理空值。
语法:
ISNULL(expression, replacement_value)
参数:
expression:要检查的表达式。replacement_value:如果expression为 NULL,则返回的值。
示例:
-- SQL Server
SELECT ISNULL(NULL, 'Default Value') AS Result; -- 返回 'Default Value'
SELECT ISNULL((SELECT ColumnName FROM TableName WHERE Condition), 'Default Value') AS Result;
2. NVL
Oracle 使用 NVL 函数来处理空值。
语法:
NVL(expression, replacement_value)
参数:
expression:要检查的表达式。replacement_value:如果expression为 NULL,则返回的值。
示例:
-- Oracle
SELECT NVL(NULL, 'Default Value') FROM DUAL; -- 返回 'Default Value'
SELECT NVL((SELECT ColumnName FROM TableName WHERE Condition), 'Default Value') FROM DUAL;
3. IFNULL
MySQL 和 MariaDB 使用 IFNULL 函数来处理空值。
语法:
IFNULL(expression, replacement_value)
参数:
expression:要检查的表达式。replacement_value:如果expression为 NULL,则返回的值。
示例:
-- MySQL
SELECT IFNULL(NULL, 'Default Value') AS Result; -- 返回 'Default Value'
SELECT IFNULL((SELECT ColumnName FROM TableName WHERE Condition), 'Default Value') AS Result;
4. COALESCE
SQL Server、PostgreSQL、Oracle、MySQL 和 MariaDB 等许多数据库系统都支持 COALESCE 函数。
语法:
COALESCE(expression1, expression2, ...)
参数:
expression1, expression2, ...:要检查的表达式列表。
返回值:
- 返回参数列表中第一个非 NULL 值。如果所有参数都是 NULL,则返回 NULL。
示例:
-- SQL Server
select COALESCE (null,'100','120'); -- 返回 '100'
select COALESCE (null,'110',null,'120'); -- 返回 '110'
SELECT COALESCE(NULL, 'Second', 'Third') AS Result; -- 返回 'Second'
SELECT COALESCE((SELECT ColumnName1 FROM TableName WHERE Condition1), 'Second', 'Third') AS Result;
-- Oracle
SELECT COALESCE(NULL, 'Second', 'Third') FROM DUAL; -- 返回 'Second'
SELECT COALESCE((SELECT ColumnName1 FROM TableName WHERE Condition1), 'Second', 'Third') FROM DUAL;
-- MySQL
SELECT COALESCE(NULL, 'Second', 'Third') AS Result; -- 返回 'Second'
SELECT COALESCE((SELECT ColumnName1 FROM TableName WHERE Condition1), 'Second', 'Third') AS Result;
-- PostgreSQL
SELECT COALESCE(NULL, 'Second', 'Third') AS Result; -- 返回 'Second'
SELECT COALESCE((SELECT ColumnName1 FROM TableName WHERE Condition1), 'Second', 'Third') AS Result;
总结
ISNULL用于 SQL Server 和 Sybase。NVL用于 Oracle。IFNULL用于 MySQL 和 MariaDB。COALESCE用于 SQL Server、PostgreSQL、Oracle、MySQL 和 MariaDB。
这些函数的主要目的是处理空值,确保查询结果的准确性和一致性。
【SQL】NVL函数的用法和MySQL中有什么不同
附加:coalesce在MySQL里怎么使用
2.最常见的 4 个场景
| 场景 | 示例 | 说明 |
|---|---|---|
| 空值兜底 | SELECT COALESCE(nickname, username, '匿名') AS show_name FROM users; |
优先用昵称,没有再用户名,还没有就显示“匿名”。 |
| 日期兜底 | SELECT COALESCE(shipped_at, paid_at, created_at) AS final_time FROM orders; |
按“发货→付款→下单”优先级取时间。 |
| 数值运算 | SELECT COALESCE(bonus, 0) + COALESCE(salary, 0) AS total_income FROM staff; |
如果 bonus 为 NULL,则当 0 算,避免结果直接变 NULL。 |
| 多表 JOIN 补值 | SELECT COALESCE(a.phone, b.phone, c.phone) AS contact FROM …; |
三张表都有 phone 字段,依次取第一个非空。 |
3.与 IFNULL、NVL 的区别
| 函数 | 参数个数 | MySQL 支持 | 备注 |
|---|---|---|---|
COALESCE |
≥2 | ✔ | 标准 SQL,跨平台;可链式多值。 |
IFNULL(expr1, expr2) |
2 | ✔ | 仅 MySQL,功能=COALESCE 两参数版。 |
NVL(expr1, expr2) |
2 | ✘(Oracle 用) | MySQL 不支持。 |

更多推荐
所有评论(0)