读书人

这是SQL Server 的 Bug 吗求解释呀求

发布时间: 2013-11-25 13:22:27 作者: rapoo

这是SQL Server 的 Bug 吗,求解释呀求解释~~


PS: space(n)表示由n个空格组成的字符串,space(0)就是''
另外我使用的是2008R2
[解决办法]
select len(space(4))
select len(space(100))
/*
0
*/

结果都是:0
从这里你可以找出答案了
[解决办法]
你的疑问一句话就可以解答:

SQL SERVER在字符串比较时会忽略后面的空格

至于LEN,这个是函数内的处理机制,计算长度时忽略后面的空格
[解决办法]
引用:
Quote: 引用:

我发现,这些个函数,比如:len都会把字符串转化为varchar或者nvarchar,然后再进行计算,这里的代码,:

select LEN(cast(SPACE(1)+'aaa' as char)),
LEN(cast('aaa'+SPACE(1) as CHAR))
/*
43
*/


而一旦转化为varchar或nvarchar,那么自动就会忽略尾部的空格了
char类型之间的比较和算len()也是会忽略尾随空格的,不懂为什么微软要这样处理


还真是,我试了一下,确实是像你说的,char也会忽略尾部的空格:

select case when CAST('aa' AS char) = CAST('aa ' AS CHAR)
then 1
else 0
end
/*
1
*/

读书人网 >SQL Server

热点推荐