VARCHAR列上的WHERE子句似乎作为LIKE运行

时间:2013-03-06 12:51:46

标签: sql-server select sql-like varchar

我偶然发现了一个我以前从未见过的情况。我希望有人可以解释以下内容。

我已经运行了以下查询,希望只获得列的结果,其值与1101完全相同

select '--' + MyColumn + '--' SeeSpaces, Len(MyColumn) as LengthOfColumn 
from MyTable 
where MyColumn = '1101'

但是,我也看到1101后面跟着(我认为是)空格的值。

所以SeeSpaces返回

--1101    --

LengthOfColumn返回4

MyColumnVARCHAR(8), NOT NULL列。其值(包括空格)通过单独的工作流程插入。

为什么这个选择不仅仅返回确切的结果?

提前致谢

2 个答案:

答案 0 :(得分:1)

原因是SQL服务器将字符串与尾随空格进行比较的方式,它遵循ANSI标准,因此字符串'1101'和'1101'是等效的。

有关详细信息,请参阅以下内容:

INF: How SQL Server Compares Strings with Trailing Spaces

答案 1 :(得分:0)

我认为你必须在比较时使用LTRIM() and RTRIM()函数:

LTRIM(RTRIM(MYCOLUMN))='1101' 

LEN函数也不计算空格,它只计算字符串中的字符数。请参考:http://msdn.microsoft.com/en-us/library/ms190329%28SQL.90%29.aspx