今天无意看到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('','')返回空值,所以最后返回的是空值。
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):
isnull(nullif('',''),12) :
isnull(nullif('',''),'mnsps'):
isnull(nullif('***','***'),'123') :