2010-09-02 4 views
-1

Необходимо написать SQL-запрос для поиска специального символа в столбце. Текст, необходимый для поиска, это «R & D», ​​но проблема заключается в том, что SQL Server 2005 воспринимает его как логический оператор.Поиск по SQL-запросу ampersand &

+3

Можете ли вы опубликовать запрос, который используете? – Oded

+0

выберите Column_Name из Table_Name где содержит (Column_Name, 'R & D') – Malik

+0

Возможно, отредактируйте название вопроса, чтобы конкретно указать contains() – codeulike

ответ

0

Я предполагаю, что вы используете параметры, правильно?
Потому что, если вы НЕ используете параметры, он работает (см. Другие ответы).

Что не работает так:

declare @tmp nvarchar(20) 
set @tmp = 'R&D' 

select * from MyTable where MyColumn = @tmp 

Единственный способ, который я нашел, чтобы заставить его работать с параметрами делает это следующим образом:

declare @tmp nvarchar(20) 
set @tmp = 'R&D' 

select * from MyTable where MyColumn like '%' + @tmp + '%' 

EDIT:

Прежде всего, мне нужно знать, используете ли вы параметры o r нет.

Если нет, я не понимаю проблему вообще.
Один из них будет работать (с или без Т.П.):

select * from MyTable where MyColumn = 'R&D' 
select * from MyTable where MyColumn like '%R&D%' 

Если вы сделать работу с параметрами, мое выше решение (... как '%' + @tmp + '%') является единственное, что я знаю.


EDIT 2

Теперь, когда я знаю, что тип данных «текст»: Проблема в том, что вы можете осуществить поиск только текст с LIKE (не с «=»), и вы можете 't индексируйте текстовый столбец для увеличения скорости.
Тип текстовых данных устарел, поэтому в любом случае вы должны изменить его на varchar (max).
И varchar (max) не имеет ограничений, которые имеет текст: вы можете искать его с помощью «=», и вы можете его индексировать.

Так что это будет правильное решение: замените его на текст на varchar (max), и все будет работать!

+0

Как и так много времени. Любой другой вариант? – Malik

1
Select * From dbo.MyTable 
Where MyColumn like '%R&D%' 

или вы могли бы использовать это вместо like:

Select * From dbo.MyTable 
Where PatIndex('%R&D%', MyColumn) > 0 
+0

Как и так много времени. Любой другой вариант? – Malik

0
declare @tbl table 
(
    textcol varchar(50) 
) 

insert into @tbl select 'R&D' 
insert into @tbl select 'What is R&D' 
insert into @tbl select 'SometextR&DAndsometext' 
insert into @tbl select 'This Row will not return' 

select * from @tbl where textcol like '%R&D%' 
+0

Нравится так много времени. Любой другой вариант? – Malik

+0

Сколько времени? Каков тип данных столбца? Какие у вас данные? – Kashif

+0

Сравнительно долго. Сейчас мы ищем альтернативы. Если найдется, здорово, нет, жить с ним. Тип столбца - это текст. Данные - это огромный фрагмент текстового символа. – Malik