2013-01-14 3 views
2

Нужна помощь внизу.Как оператор на полную длину строки в SQL Server 2008

Я использую sql seerver 2008 и имею запрос, в котором я использую как оператор. , когда я использую часть строки, тогда ее рабочий тон, однако, когда я использую полную строку в подобной базе данных оператора, не заполняет никаких результатов.

например. У меня есть таблица EMp, которая содержит столбец описания. если столбец содержит descreption

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]%' 

его не возвращает значение.

означает, что, подобно оператору, работает только часть строки, а не полная строка. Я также пробовал LTRIM и RTRIM, чтобы убедиться, что пространство не проблема, но его не работает.

Благодаря

ответ

5

Имейте в виду, что LIKE поддерживает ограниченный набор шаблона соответствует в дополнение к групповым символом %. Один из этих шаблонов включает скобки для соответствия диапазону.

См: http://msdn.microsoft.com/en-us/library/ms179859.aspx

Скобки в запросе заставит его искать «Любой одиночный символ в пределах указанного диапазона ([а-е]) или наборе ([ABCDEF]).»

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

Таким образом, ваш запрос просит SQL Server, чтобы найти символ в наборе [1234567890].

Если вы читаете MSDN documentation, в нем приведены рекомендации по использованию подстановочных знаков в качестве литералов. Вот небольшой пример:

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).

+2

+1, Чтобы исправить проблему, вам нужно сбежать из кронштейна с помощью дополнительного кронштейна. 'description like '% John присоединился в среду/CELL PHONE [[1234567890]%'' –

+0

Спасибо. Я просто добавлял редактирование на этот счет. –

+0

Привет, Тим, только одно. Я получаю описание в качестве входного параметра в хранимой процедуре, и эта скобка может встречаться где угодно в описании. Есть ли способ сделать это универсальным, так что мой запрос будет игнорировать любой [приходящий текст описания. – user1717270

Смежные вопросы