在SQL Server中,处理NULL值是非常常见的需求,因为它代表一个未知或未定义的值。SQL Server提供了几个内置函数和操作符来处理NULL值,以下是其中一些主要的函数和用法。
在 SQL Server 中,如果表达式中涉及 NULL 值,那么整个表达式的结果通常也会是 NULL,因为 SQL 遵循“三值逻辑”(True / False / Unknown),任何与 NULL 的算术运算结果都是 NULL。特别是用NULL和其他数做计算式,相加、相减或者是相乘。
如果你的计算中可能会有NULL值,那么请使用ISNULL或NULLIF替换,避免影响整个结果。
如果你的计算中可能会有NULL值,那么请使用ISNULL或NULLIF替换,避免影响整个结果。
ISNULL(字段,字段为NULL时替换为的值)
该函数用来替换NULL值。如果第一个参数为NULL,则返回第二个参数的值;否则返回第一个参数的值。
语法:
ISNULL(expression, replacement_value)
示例:
SELECT ISNULL(NULL, 0); -- 返回 0
NULLIF(expression1, expression2)
当两个表达式的值相等时,返回NULL;否则返回第一个表达式的值。
这个函数通常用于避免除数为零的情况或者在某些业务逻辑中需要将相等的值转换为 NULL
语法:
NULLIF(expression1, expression2)
示例:
SELECT NULLIF(1, 1); -- 返回 NULL
SELECT NULLIF(1, 2); -- 返回 1
COALESCE(expression1, expression2, …, expression_n)
返回第一个非NULL的表达式的值。如果所有表达式都是NULL,则返回NULL。
语法:
COALESCE(expression1, expression2, …, expression_n)
示例:
SELECT COALESCE(NULL, NULL, 'Default'); -- 返回 'Default'
IS [NOT] NULL
这是用于测试一个表达式是否为NULL的操作符。
语法:
expression IS [NOT] NULL
示例:
SELECT * FROM table WHERE column IS NULL;
SELECT * FROM table WHERE column IS NOT NULL;
三值逻辑
在比较运算中,NULL值会使得比较结果不确定,即返回NULL。例如,NULL = NULL不会返回TRUE或FALSE,而是NULL。
算术运算
NULL值参与的任何算术运算都会导致结果为NULL。
利用null函数
SqlServer: isnull(字段,0)
oracle: nvl(字段,0)
access: iif(isnull(字段),0,字段)
mysql: ifnull(字段,0);
这种用法常见于数值字段,例如
SUM(ISNULL(字段,0))
除数为零处理示例
在 SQL Server 中,当执行除法运算时,如果除数为零,会抛出“Divide by zero encountered”错误。为了避免这个错误,可以使用以下几种方法:
1. 使用 NULLIF 函数(推荐)
NULLIF 函数比较两个表达式,如果相等则返回 NULL,否则返回第一个表达式。
SELECT
分子 / NULLIF(分母, 0) AS 结果
FROM 表名;
说明:
- 如果
分母为 0,NULLIF(分母, 0)返回NULL。 - 任何数除以
NULL的结果是NULL,而不会报错。 - 这是最简洁、最常用的方法。
2. 使用 CASE 语句
通过 CASE 语句显式检查除数是否为零。
SELECT
CASE
WHEN 分母 = 0 THEN NULL -- 或者指定其他默认值,如 0
ELSE 分子 / 分母
END AS 结果
FROM 表名;
说明:
- 逻辑清晰,可读性强。
- 可以灵活地指定除零时的返回值(如
NULL、0或其他值)。
相关文章
#已同步
© 版权声明
THE END














