我偶然发现了一个我以前从未见过的情况。我希望有人可以解释以下内容。
我已经运行了以下查询,希望只获得列的结果,其值与1101
完全相同
select '--' + MyColumn + '--' SeeSpaces, Len(MyColumn) as LengthOfColumn
from MyTable
where MyColumn = '1101'
但是,我也看到1101
后面跟着(我认为是)空格的值。
所以SeeSpaces
返回
--1101 --
LengthOfColumn
返回4
MyColumn
是VARCHAR(8), NOT NULL
列。其值(包括空格)通过单独的工作流程插入。
为什么这个选择不仅仅返回确切的结果?
提前致谢
答案 0 :(得分:1)
原因是SQL服务器将字符串与尾随空格进行比较的方式,它遵循ANSI标准,因此字符串'1101'和'1101'是等效的。
有关详细信息,请参阅以下内容:
答案 1 :(得分:0)
我认为你必须在比较时使用LTRIM() and RTRIM()
函数:
LTRIM(RTRIM(MYCOLUMN))='1101'
LEN
函数也不计算空格,它只计算字符串中的字符数。请参考:http://msdn.microsoft.com/en-us/library/ms190329%28SQL.90%29.aspx