SQL的IsNull 和 NullIf使用说明

首先看看SQL SERVER 联机丛书的信息,其中我们该注意的地方我用红字标出:

ISNULL

使用指定的替换值替换 NULL。

语法

ISNULL ( check_expression , replacement_value )

参数

check_expression

将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。

replacement_value

check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。

返回类型

返回与 check_expression 相同的类型。

注释

如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value

 

NULLIF

如果两个指定的表达式相等,则返回空值。

语法

NULLIF ( expression , expression )

参数

expression

常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组合。

返回类型

返回类型与第一个 expression 相同。

如果两个表达式不相等,NULLIF 返回第一个 expression 的值。如果相等,NULLIF 返回第一个 expression 类型的空值。

注释

如果两个表达式相等且结果表达式为 NULL,NULLIF 等价于 CASE 的搜索函数。

 

从以上的红字信息我们可以发现:

 

    1、两个函数的返回值都是特定类型的,就算是空值,也是特定类型的,也就是说是特定的数据类型和长度(特别是字符串类型的长度)的。

 

    2、使用两个函数的组合可以让SQL代码精简并可替代Case语句

 

下面给出一些示例供大家参考,请大家在使用中注意:   

 SELECT HopeBe_0 = ISNULL(NULLIF('',''),0)

       --返回 *

       --说明:显然这里已经违反了 ISNULL 的 要求了(红字部分),

       --且0转成字符串的长度为1,而''的长度为0

 

      SELECT HopeBe_0 = ISNULL(NULLIF(' ',' '),0) 

       --返回 0

       --说明:这里虽然已经违反了 ISNULL 的 要求了(红字部分),

       --但是0转成字符串的长度为1,而' '的长度为也为1

 

        SELECT HopeBe_Empty = ISNULL(ISNULL('',''),0) 

       --返回 ''

       --说明:这个可以理解吧

 

        SELECT HopeBe_n_0 = ISNULL(NULLIF('',''),'0000') 

       --返回 ''

       --说明:这个比较经典,请往下看

 

        SELECT HopeBe_n_0 = ISNULL(NULLIF('x','x'),'0000') 

       --返回 0

 

        SELECT HopeBe_n_0 = ISNULL(NULLIF('xx','xx'),'0000') 

       --返回 00

 

        SELECT HopeBe_n_0 = ISNULL(NULLIF('xxx','xxx'),'0000') 

       --返回 000

 

        SELECT HopeBe_n_0 = ISNULL(NULLIF('xxxx','xxxx'),'0000') 

       --返回 0000

 

        SELECT HopeBe_n_0 = ISNULL(NULLIF('xxxxx','xxxxx'),'0000') 

       --返回 0000

 

至于替代 case 的示例靠大家领会,我只给了我经常用的小片:

      ... IsNull(NullIf(count(ID),0),1)

      --说明:这是为了防止除0和除NULL

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL中,ISNULL函数用于判断一个字段的值是否为空,并在为空时返回指定的值。它的语法为ISNULL(expr1, expr2),其中expr1是要判断的字段,expr2是在字段为空时返回的值。如果expr1为空,那么ISNULL函数会返回expr2;如果expr1不为空,那么ISNULL函数会返回expr1的值。 举个例子,假设有一个表xuesheng,其中包含字段name和分数。如果我们想要查询名为"张三"的学生的分数,但如果分数为空,我们希望返回0,可以使用以下SQL语句: SELECT ISNULL(分数, 0) FROM xuesheng WHERE name = '张三'; 这条SQL语句会返回名为"张三"的学生的分数,如果分数为空,则返回0。 除了ISNULL函数,还有其他一些可以用来处理空值的函数。例如,NULLIF函数可以用来比较两个表达式的值,如果相等则返回NULL,否则返回第一个表达式的值。这可以用来处理某些特定的业务逻辑。 总之,在SQL中,使用ISNULL函数可以方便地处理字段为空的情况,并返回指定的默认值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SQLisnull()用法总结](https://blog.csdn.net/qq_41844424/article/details/103071951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值