这是SQL Server 的 Bug 吗,求解释呀求解释~~
if isnull(space(100),space(0))=space(0) select 1 -- 输出1
if isnull(space(100),space(0))=space(10) select 1 -- 输出1
if isnull(space(100),space(1))=space(1) select 1 -- 输出1
if isnull(NULL,space(0))=space(100) select 1 -- 输出1
上述判断为什么都为
真 呢?
而下面这些却是
符合预期 的输出:
select len(isnull(space(4),space(100))+'X') - 1 -- 输出4
select len(isnull(space(0),space(100))+'X') - 1 -- 输出0
select len(isnull(NULL,space(100))+'X') - 1 -- 输出100
大家顺便也说说使用ISNULL函数应该注意的地方吧,太邪门了!
PS: space(n)表示由n个空格组成的字符串,space(0)就是''
另外我使用的是2008R2
------解决方案--------------------select len(space(4))
select len(space(100))
/*
0
*/
结果都是:0
从这里你可以找出答案了
------解决方案--------------------你的疑问一句话就可以解答:
SQL SERVER在字符串比较时会忽略后面的空格
至于LEN,这个是函数内的处理机制,计算长度时忽略后面的空格
------解决方案--------------------
还真是,我试了一下,确实是像你说的,char也会忽略尾部的空格:
select case when CAST('aa' AS char) = CAST('aa ' AS CHAR)
then 1
else 0
end
/*
1
*/