SQL NULL 函数

 

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

这几个函数是但字段为空时如何处理,

 

例如有"Products" 表:

P_IdProductNameUnitPriceUnitsInStockUnitsOnOrder
1computer6992515
2printer36536 
3telephone28015957

 

 

 

SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products

 

 

当UnitsOnOrder为null 时UnitPrice*(UnitsInStock+UnitsOnOrder)返回的也是null,

这样怎么办呢,

sql中有ISNULL,NVL,IFNULL,COALESCE,

 

其中 ISNULL是 SQL Server 和 MS Access中的方法,

NVL是Oracle中的方法

IFNULL和COALESCE是MySql中的方法

用法是一样的:

 

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

 

 

 

SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products

 

 

 

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products

 

 

 

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

 

 

 

 

详细见:http://www.w3school.com.cn/sql/sql_isnull.asp

 

 

 

 

 

 

 

 

 

 

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` 都能提供简洁且高效的解决方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值