2014-10-21 2 views
0

у меня есть один запрос на выборку для поиска, мой @SearchText может состоять из нескольких словSQL: Поиск текста, который содержит в массивах

Я хочу, чтобы отделить слова в массив и выбрать, если какой-нибудь текст содержит мой поиск текст

Запрос:

ALTER PROCEDURE [dbo].[myStoreProcedure] 
@SearchText varchar(100) 
AS 
BEGIN 
SELECT * FROM t0 
     WHERE 
ISNULL(@SearchText, '')='' OR t0.title LIKE '%' [email protected] + '%') 

Теперь я хочу: если искать строку «адам Смит» или «кузнец адам» результат должен быть такими же

H ой я могу конвертировать мой @SearchText в массиве и вытяжных строки из table- t0 где заголовок содержит мой @SearchText в любом порядке

+3

SQL не имеет «массивы». SQL имеет таблицы со строками. Таким образом, вы хотите разделить ваш '@ SearchText' и поместить каждое слово в отдельную строку временной таблицы, а затем выполнить поиск значений столбца базы данных для любой комбинации содержимого этой временной таблицы. При этом вам, вероятно, будет лучше использовать возможности полнотекстового поиска SQL Server. – stakx

ответ

0

Когда я передаю параметр необходимо удалить двойные пробелы и добавить между словами «ИЛИ», как это:

searchText = searchText.Replace(" ", " ").Replace(" ", " OR "); 
command.Parameters.Add("@SearchText", SqlDbType.VarChar, 200).Value = searchText; 

В SQL:

((@SearchText = '""') OR CONTAINS(t0.title, @SearchText)) 
1

Try с помощью СОДЕРЖИТ оператор:

ALTER PROCEDURE [dbo].[myStoreProcedure] 
@SearchText varchar(100) 
AS 
BEGIN 
SELECT * FROM t0 
     WHERE 
ISNULL(@SearchText, '')='' OR CONTAINS(t0.title,@SearchText) 

Более общий поиск, вы может сделать с оператором CONTAINS.

+0

Использование содержит необходимо разделить слово с «OR», чтобы работать правильно – Alex

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