日期:2014-05-19  浏览次数:20749 次

奇怪了,isnull(a,0)与case when a is null then 1 else 0 end
字段a默认值就是为1,以前用isnull(a,0)得出的结果都正确,但现在不行了,得出的结果都为1,而用case   when   a   is   null   then   1   else   0   end却可以,不知道是什么原因.
tb1   表1
tb2   表2
select   tb1.fd1,isnull(tb2.a,0)   as   fd2
from   tb1   left   join   tb2   on   tb1.fd1=tb2.fd1

------解决方案--------------------
case when a is null then 1 else 0 end

为null时返回1,不为null返回0,自然跟isnull(a,0)的结果不同。

很显然a字段不为空,可能是空字符串 ' '或者空格等不可见字符。
------解决方案--------------------
1,
空字符串与null是不同的.
a不为空,则isnull(a,0)的值就是本身的值呀.即就是1

2.
case when a is null then 1 else 0 end 的意思是说,为null时为1,否则为0,现在不是null,所以结果就是0.