ISNULL AND NULLIF 的区别

    今天无意看到nullif()这个函数,猛的想起isnull 这个函数,这两个意思一样吗。我知道 isnull(check_expression,replacement_expression)

如果check_expression的值为null,用replacement_expression的值代替。查了一下 nullif(expression1,expression2) 如果两个

表达式的值一样就返回空值,注意不是null值。如果expression1和expression2的值不一样,返回expression1的值


然后试了几个语句,发现有问题:

select A=isnull(nullif('',''),1)

这个返回的是1,这个好理解nullif('','')因为这两个值相等,所以返回的是空值,空值并不是null ,这样的话结果应该是空值,怎么会是1呢。


s elect A =isnull(isnull('',''),0)

这个返回的是空值,isnull('','')返回空值,所以最后返回的是空值。

select A=isnull(nullif('',''),112)

这个返回的是*.


select A=isnull(nullif('',''),'K112')

这个返回K.只能这样解释nullif('','')这个返回的是长度为1的null,但是nullif('','')这个不会返回null的,根据定义是返回空值的。难道是sql 内部处理了。如果是空值的话,就转换成
SELECT A = ISNULL(NULLIF('*','*'),'1234')  
这个返回1
SELECT A = ISNULL(NULLIF('xxx','xxx'),'1234')  
这个返回123,这个理解是nullif('xxx','xxx') 返回的是第一个表达式的类型的空值,因为这个类型长度是3,所以返回的特殊类型的长度是3

,这个特殊类型是null值吗,只能这样解释,如果不是长度为3的null的话,应该返回的是长度为3的空值。


总结一下,不明白的地方:

  isnull(nullif('',''),1): nullif('','')返回的是特殊字符的带有指定长度的字符,不知道是什么类型的.isnull(nullif的返回类型,1) 结果是1.正好说明nullif返回的是长度是1的特殊字符,但是这个字符isnull有不能识别,好像是特殊字符类型的null.

isnull(nullif('',''),12) : 返回* .说明特殊字符类型的null 的长度.和12 的长度不匹配, 不能把12转换成特殊字符的类型.也有的说.字符类型和数字在内存中的存储方式不 一样.

 

isnull(nullif('',''),'mnsps'): 返回的是m .说明这个特殊的字符类型的null的长度是以1.所以 'mnsps' 只取m

isnull(nullif('***','***'),'123') : 返回123 :说明这个特殊字符类型的null长度是根据nullif第一个表达式的长度来定的.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值