NULL丨数据库中一个特殊值的用法

在SQL Server中,处理NULL值是非常常见的需求,因为它代表一个未知或未定义的值。SQL Server提供了几个内置函数和操作符来处理NULL值,以下是其中一些主要的函数和用法。

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 表名;

说明:

  • 逻辑清晰,可读性强。
  • 可以灵活地指定除零时的返回值(如 NULL0 或其他值)。

相关文章

© 版权声明
THE END
喜欢就点赞吧
点赞15 分享