今天无意看到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') :