SQL NULL 函数

本文介绍了在SQL中处理NULL值的不同方法,包括使用ISNULL()、NVL()、IFNULL()和COALESCE()函数来替代NULL值为0,确保在进行数值计算时不会因NULL值而导致结果为NULL。

SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数

SERIALNUMBERMANUFACTURERIMPORT_PRICEEXPORT_PRICE
1XTEP110.78224.90
2361151.12224.90
3ERKE
4157.89224.00

EXPORT_PRICE和IMPORT_PRICE是可选的而且包含NULL值
我们算出差价:

SELECT MANUFACTURER,EXPORT_PRICE-IMPORT_PRICE FROM TROUSERS;

结果:

MANUFACTUREREXPORT_PRICE-IMPORT_PRICE
XTEP114.12
361172.88
ERKE
66.11

如果有 “EXPORT_PRICE和IMPORT_PRICE” 值是 NULL,那么结果是 NULL。
微软的 ISNULL() 函数用于规定如何处理 NULL 值。
NVL(), IFNULL() 和 COALESCE() 函数也可以达到相同的结果。
在这里,我们希望 NULL 值为 0。
如果 “IMPORT_PRICE和EXPORT_PRICE” 是 NULL,则不利于计算,因此如果值是 NULL 则 ISNULL() 返回 0。
SQL Server / MS Access

SELECT MANUFACTURER,ISNULL(EXPORT_PRICE,0)-ISNULL(IMPORT_PRICE,0) FROM TROUSERS

Oracle
Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:

SELECT MANUFACTURER,NVL(EXPORT_PRICE,0)-NVL(IMPORT_PRICE ,0) FROM TROUSERS

MySQL
MySQL 也拥有类似 ISNULL() 的函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。
在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:

SELECT MANUFACTURER,IFNULL(EXPORT_PRICE,0)-IFNULL(IMPORT_PRICE ,0) FROM TROUSERS

或者我们可以使用 COALESCE() 函数:

SELECT MANUFACTURER,COALESCE(EXPORT_PRICE,0)-COALESCE(IMPORT_PRICE ,0) FROM TROUSERS

结果集:

MANUFACTUREREXPORT_PRICE-IMPORT_PRICE
XTEP114.12
361172.88
ERKE0
66.11
SQL Server 中,`NULLIF` 是一个非常实用的函数,用于比较两个表达式的值。如果两个表达式相等,则 `NULLIF` 返回 `NULL`;如果它们不相等,则返回第一个表达式的值。该函数的语法如下: ```sql NULLIF(expression1, expression2) ``` ### 基本用法 - **比较两个相同值的表达式** 当 `expression1` 和 `expression2` 的值相等时,`NULLIF` 返回 `NULL`。例如: ```sql SELECT NULLIF(10, 10) -- 返回 NULL ``` 这里由于两个参数的值都为 `10`,因此返回 `NULL` [^2]。 - **比较两个不同值的表达式** 如果两个表达式不相等,则 `NULLIF` 返回第一个表达式的值。例如: ```sql SELECT NULLIF(20, 10) -- 返回 20 ``` 因为 `20` 和 `10` 不相等,所以返回第一个参数 `20` 。 ### 常见应用场景 - **处理除数为零的情况** 在涉及除法运算时,为了避免除数为零导致错误,可以结合 `NULLIF` 和 `ISNULL` 使用。例如: ```sql DECLARE @a INT = 10; DECLARE @b INT = 0; SELECT ISNULL(@a / NULLIF(@b, 0), 1) -- 当 @b 为 0 时返回 1 ``` 这里 `NULLIF(@b, 0)` 会将除数 `@b` 检查是否为 `0`,如果是 `0`,则返回 `NULL`,从而避免除法错误。然后通过 `ISNULL` 将结果替换为默认值 `1` [^5]。 - **处理空字符串或默认值** `NULLIF` 可用于将某些特定值(如空字符串)替换为 `NULL`,从而简化后续的逻辑处理。例如: ```sql SELECT NULLIF(column1, ' ') ``` 如果 `column1` 的值为空格 `' '`,则返回 `NULL`;否则返回 `column1` 的实际值。这种用法在数据导出或清理时特别有用 [^3]。 - **统计不相等的数量** 在统计某些字段不相等的记录数量时,可以结合 `COUNT` 和 `NULLIF`。例如: ```sql SELECT COUNT(NULLIF(a, b)) -- 统计 a 不等于 b 的数量 FROM t_test ``` 这里 `NULLIF(a, b)` 会在 `a` 和 `b` 相等时返回 `NULL`,而 `COUNT` 函数会忽略 `NULL` 值,从而统计 `a` 和 `b` 不相等的记录数量 [^4]。 ### 注意事项 - **参数类型必须一致** `NULLIF` 的两个参数类型必须相同,否则会引发类型转换错误。例如: ```sql SELECT NULLIF('10', 10) -- 报错:类型不匹配 ``` 这里第一个参数是字符串 `'10'`,而第二个参数是整数 `10`,类型不一致会导致错误 [^2]。 - **避免不必要的 NULL 值** 在使用 `NULLIF` 时,需要确保其返回的 `NULL` 值不会影响后续的业务逻辑。例如在除法运算中,建议结合 `ISNULL` 或 `COALESCE` 来处理可能的 `NULL` 结果 [^5]。 ### 总结 `NULLIF` 是一个非常灵活的函数,能够帮助开发者在 SQL 查询中处理各种相等性检查问题。无论是避免除法错误、清理数据,还是统计不相等的记录,`NULLIF` 都能提供简洁且高效的解决方案。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值