在数据库操作中,null值代表字段没有存储任何数据,和空字符串、0等值是完全不同的概念,判断null值不能直接使用等于号,不同数据库有各自的语法规则,Oracle和SQL Server的判断方式存在明显区别。

Oracle中判断null的方法
基础判断语法
Oracle中判断字段是否为null,直接使用IS_NULL关键字,不能使用= NULL的写法,后者不会返回正确结果。判断不为null则使用IS NOT NULL。
示例表结构如下,表名为user_info,包含id、username、email三个字段,其中email字段允许存储null值:
-- 查询email为null的用户记录 SELECT id, username, email FROM user_info WHERE email IS NULL; -- 查询email不为null的用户记录 SELECT id, username, email FROM user_info WHERE email IS NOT NULL;
常用处理函数
Oracle提供了NVL和NVL2函数处理null值,可在判断null的同时完成值替换。
NVL(expr1, expr2):如果expr1为null,返回expr2,否则返回expr1NVL2(expr1, expr2, expr3):如果expr1不为null,返回expr2,否则返回expr3
-- 将email为null的记录替换为'未填写' SELECT id, username, NVL(email, '未填写') AS email_val FROM user_info; -- 不为null显示邮箱,为null显示提示 SELECT id, username, NVL2(email, email, '暂无邮箱') AS email_info FROM user_info;
SQL Server中判断null的方法
基础判断语法
SQL Server同样使用IS NULL和IS NOT NULL判断null值,不支持= NULL的写法,语法和Oracle的基础判断逻辑一致。
-- 查询email为null的用户记录 SELECT id, username, email FROM user_info WHERE email IS NULL; -- 查询email不为null的用户记录 SELECT id, username, email FROM user_info WHERE email IS NOT NULL;
常用处理函数
SQL Server使用ISNULL和COALESCE函数处理null值,功能类似Oracle的NVL函数。
ISNULL(expr1, expr2):和Oracle的NVL功能一致,expr1为null返回expr2,否则返回expr1COALESCE(expr1, expr2, ...):返回参数列表中第一个不为null的值,支持多个参数
-- 将email为null的记录替换为'未填写' SELECT id, username, ISNULL(email, '未填写') AS email_val FROM user_info; -- 返回第一个不为null的值,优先取email,再取username,都没有返回'无信息' SELECT id, COALESCE(email, username, '无信息') AS user_contact FROM user_info;
两种数据库判断null的差异对比
以下是Oracle和SQL Server在null判断相关功能上的核心差异:
| 对比项 | Oracle | SQL Server |
|---|---|---|
| 基础判断语法 | IS NULL / IS NOT NULL | IS NULL / IS NOT NULL |
| 单参数替换函数 | NVL | ISNULL |
| 多参数替换函数 | NVL2(仅支持两个参数判断) | COALESCE(支持多个参数) |
| 空字符串和null的关系 | 空字符串会被存储为null | 空字符串和null是不同的值 |
注意事项
在编写跨数据库的SQL语句时,需要注意以下两点:
- 不要使用
= NULL或者!= NULL的判断方式,两种数据库都不会返回预期结果 - 如果业务需要兼容两种数据库,优先使用
IS NULL基础语法,处理函数部分需要根据实际数据库类型做适配,避免直接使用数据库特有的函数
注意:SQL Server中如果字段存储的是空字符串,使用IS NULL判断会返回false,而Oracle中插入空字符串到允许null的字段时,实际存储的是null,判断会返回true,这是二者最容易踩坑的差异点。
OracleSQL_Serversql判断nullIS_NULL函数修改时间:2026-07-03 20:42:32