2

在下面需要帮助。

我正在使用 sql seerver 2008 并且有一个查询,我在其中使用 like 运算符。当我使用字符串的一部分时,它工作正常但是当我在类似运算符数据库中使用完整字符串时不会填充任何结果。

例如。我有包含描述列的表 EMp。如果描述列包含

Description
-------------------------------------------------
'John joined on Wednesday/CELL PHONE [1234567890]'

当我写查询时

select * from EMp where 
description like '%CELL%'

它工作正常但是当我将我的查询写为

select * from EMp where 
description like '%John joined on Wednesday/CELL PHONE [1234567890]%'

它没有返回任何值。

这是否意味着like 运算符仅适用于部分字符串而不适用于完整字符串。我也尝试过 LTRIM 和 RTRIM 只是为了确保空间不是问题,但它不起作用。

谢谢

4

1 回答 1

5

请记住,LIKE除了通配符之外,它还支持一组有限的模式匹配%。其中一种模式包括用于匹配范围的括号。

请参阅:http: //msdn.microsoft.com/en-us/library/ms179859.aspx

查询中的括号将导致它搜索“指定范围 ([af]) 或集合 ([abcdef]) 内的任何单个字符”。

description like '%John joined on Wednesday/CELL PHONE [1234567890]%'

因此,您的查询要求 SQL Server 在集合 [1234567890] 中查找一个字符。

如果您通读MSDN 文档,它提供了使用通配符作为文字的指南。这是一个小例子:

DECLARE @table TABLE ( SomeText VARCHAR( 100 ) );
INSERT @table ( SomeText ) VALUES ( 'here is a string with [brackets]' );

-- matches with wildcards on both sides of the pattern
SELECT * FROM @table WHERE SomeText LIKE '%[brackets]%';

-- won't match
SELECT * FROM @table WHERE SomeText LIKE '%here is a string with [brackets]%';

-- matches, because expression is escaped
SELECT * FROM @table WHERE SomeText LIKE '%here is a string with [[brackets]%';

-- a confusing (but valid) escape sequence AND a wildcard
SELECT * FROM @table WHERE SomeText LIKE '%here is a string with [[][a-z]rackets]%';

请注意,如果您想搜索具有更复杂模式的较大字符串,则全文索引可能更有用。SQL Server 2008 的所有版本(甚至 Express)都支持它。

于 2013-01-14T06:40:32.083 回答