4

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

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

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

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

所以SeeSpaces返回

--1101    --

LengthOfColumn返回4

MyColumn是一VARCHAR(8), NOT NULL列。它的值(包括空格)是通过单独的工作流程插入的。

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

提前致谢

4

2 回答 2

1

原因在于 SQL Server 比较字符串与尾随空格的方式,它遵循 ANSI 标准,因此字符串 '1101' 和 '1101 ' 是等价的。

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

INF:SQL Server 如何比较字符串和尾随空格

于 2013-03-06T13:03:39.243 回答
0

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

LTRIM(RTRIM(MYCOLUMN))='1101' 

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

于 2013-03-06T12:58:03.327 回答