Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как осуществить цикл поиска в Select  [new]
Romantiktj
Member

Откуда:
Сообщений: 479
Помогите плизз сделать поиск типа:

SELECT nsubj FROM table1 WHERE nsubj LIKE '%slovo1%' OR nsubj LIKE '%slovo(2)%' OR nsubj LIKE '%slovo(3)%' OR ... и так далее, то есть в переменной массива slovo(i), i = от 1 до n

вот алгоритм :

n=количество разных слов
For j=1 to конец таблицы
SELECT nsubj FROM table1

{
for i=1 to n
WHERE nsubj LIKE '%slovo(i)%'
endfor;
}

Endfor;

Проблема в синтаксисе написания, давит ))), Будьте добры исправьте
24 сен 14, 15:06    [16616343]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2996
select nsubj FROM table1 
where exists (select * from таблица_со_словами where  nsubj LIKE '%slovo%)
24 сен 14, 15:17    [16616426]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
Romantiktj
Member

Откуда:
Сообщений: 479
HandKot
select nsubj FROM table1 
where exists (select * from таблица_со_словами where  nsubj LIKE '%slovo%)

Почти всё понял кроме %slovo% - это что, то есть какое значение оно должно принять?
24 сен 14, 15:23    [16616473]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
Хитрый жук
Member

Откуда:
Сообщений: 9
declare @mask nvarchar(4000) = N'medved';
declare @n int = 4, @i int = 1;

declare @search_words table (word nvarchar(4000));

while @i <= @n
begin
insert into @search_words
select concat(N'%', @mask, @i, N'%');
set @i = @i + 1;
end;

select *
from (
values ('solovey1'),
('solovey2'),
('solovey3'),
('gus1'),
('gus2'),
('gus3'),
('medved3'),
('medved4'),
('medved5')
) words(w)
where exists(
select *
from @search_words
where words.w like word
)
24 сен 14, 15:27    [16616504]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
nsubj LIKE '%slovo()%'
HandKot
select nsubj FROM table1 
where exists (select * from таблица_со_словами where  nsubj LIKE '%slovo%)
Наверно, так:
select T.nsubj FROM table1 T
where exists (select * from таблица_со_словами W where T.nsubj LIKE '%'+W.slovo+'%');
24 сен 14, 15:27    [16616510]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2996
точно
declare @table1 table (nsubj varchar(100))
declare @tablewords table (slovo varchar(100))

insert into @table1(nsubj) values ('word1 word2 word3'), ('word1 word4 word5'), ('word2 word6 word7'), ('word3 word8 word9')
insert into @tablewords(slovo) values ('word3')

select nsubj FROM @table1 
where exists (select * from @tablewords where  nsubj LIKE '%' + slovo + '%')
24 сен 14, 15:30    [16616525]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
Romantiktj
Member

Откуда:
Сообщений: 479
Пасибки, будем разбиратся
24 сен 14, 15:31    [16616531]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Однако же, в таком варианте будут проблемы, если в слове встречается подчёркивание, процент или квадратная скобка.
Тогда надо ещё немного поднатужиться или поискать по форуму - даже я несколько раз писал на эту тему.
24 сен 14, 15:36    [16616573]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2996
iap, я тоже так думаю и хотел заменить LIKE на CHARINDEX.
Не стал переделывать так изначально автор спрашивал про LIKE
24 сен 14, 15:41    [16616621]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
Romantiktj
Member

Откуда:
Сообщений: 479
а можно ли как нибудь обойтись без таблицы, то есть слова вытаскиваем из техтбокса а поиск осуществляется в таблице базы данных, так как одновременно входящих поисковиков(пользователей имеется в виду) может быть тысячами и запросы разные, а таблица выбранных критерий то одна, insert into @tablewords(slovo) values ('word3')
15 окт 14, 10:47    [16706014]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Romantiktj
таблица выбранных критерий то одна, insert into @tablewords(slovo) values ('word3')

Это не таблица. Это локальная табличная переменная.
15 окт 14, 10:51    [16706044]     Ответить | Цитировать Сообщить модератору
 Re: как осуществить цикл поиска в Select  [new]
Romantiktj
Member

Откуда:
Сообщений: 479
Ясно , пасиб, ушёл разбиратся, буду не скоро
15 окт 14, 11:00    [16706104]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить