与SQL Server中的运算符和尾随空格类似

时间:2014-08-06 13:47:32

标签: sql sql-server sql-server-2008 sql-like ntext

这个匹配column_name like 'CharEndsHere%'

这个不是column_name like 'CharEndsHere'

我知道像操作员一样会考虑尾随空格,所以我只是复制了精确列值(带尾随空格)并粘贴它。

类似于column_name like 'CharEndsHere '但却不匹配 - 为什么?

我没有使用'='运算符,因为列类型为ntext

我在这里缺少什么,或者我不应该以这种方式使用like运算符?

已编辑:column_name like 'CharEndsHere__'(__表示空格)'CharEndsHere '是该单元格中的确切值,使用like这种方式有效还是没有?

编辑:

这是我试过的代码,

SELECT * 
FROM [DBName].[dbo].[TableName] 
WHERE [DBName].[dbo].[TableName].Address1 LIKE rtrim('4379 Susquehanna Trail S  ') 

我也尝试过不使用rtrim,但结果相同

编辑:根据Blindy的回答,

If a comparison in a query is to return all rows with the string LIKE 'abc' (abc
without a space), all rows that start with abc and have zero or more trailing 
blanks are returned.

但就我而言,我已查询Like 'abc'并且有一个包含'abc '(with trailing spaces)的单元格未被返回。这是我的实际问题

1 个答案:

答案 0 :(得分:7)

这是阅读文档的案例,在此处明确说明:http://msdn.microsoft.com/en-us/library/ms179859.aspx

  

使用LIKE执行字符串比较时,模式字符串中的所有字符都很重要。这包括前导或尾随空格。如果查询中的比较是使用字符串LIKE' abc'返回所有行。 (abc后跟一个空格),不返回该列的值为abc(abc没有空格)的行。但是,忽略模式匹配的表达式中的尾随空格。如果查询中的比较是使用字符串LIKE' abc'返回所有行。 (没有空格的abc),返回以abc开头且具有零个或多个尾随空格的所有行。

编辑:根据您的评论,您似乎正在寻找一种方法来使用like而忽略尾随空格。使用类似这样的内容:field like rtrim('abc ')。它仍将使用索引,因为rtrim()是标量操作数,并且在查找阶段之前对其进行了评估。