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 类型的空值
注释
如果两个表达式相等且结果表达式为 NULLNULLIF 等价于 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值