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

Откуда:
Сообщений: 1
К примеру, есть таблица из двух столбцов id (int), Address (varchar (256)) . нужно найти только те записи, в которых у столбца Address в любом месте совпадает последовательность из заданного числа знаков.

Например, в таблице есть строки
(1, 'Ленина 14')
(2, 'Кулибина 23')
(3, 'Пумпурум 15')
(4, 'Блока 14')
(5, 'Петрова 42')
(6, 'Анникова 56')
Нужно найти записи, где в Address в любом месте совпадает последовательность из 3 знаков.
На выходе строки
(1, 'Ленина 14') - т.к. 'ина' есть в строке 2, и ' 14' есть в строке 4
(2, 'Кулибина 23') - т.к. 'ина' есть в строке 1
(4, 'Блока 14') - т.к. ' 14' есть в строке 1
(5, 'Петрова 42') - т.к. 'ова' есть в строке 6
(6, 'Анникова 56') - т.к. 'ова' есть в строке 5

Есть предложения как реализовать такое?
24 авг 11, 09:52    [11169040]     Ответить | Цитировать Сообщить модератору
 Re: Поиск совпадения последовательностей знаков в столбце  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Mikhail Kutyrev,Может сначала запросом сформировать словарь из исходной таблицы последовательностей из трех знаков, а потом искать по нему в исходной таблице через LIKE.
С уважением, Алексей.
24 авг 11, 09:58    [11169067]     Ответить | Цитировать Сообщить модератору
 Re: Поиск совпадения последовательностей знаков в столбце  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
Mikhail Kutyrev
Есть предложения как реализовать такое?

Довольно странно выглядит в качестве реальной задачи, но в то же время удивительно напоминает одну задачу с одного известного сайта с задачами на SQL.
А те задачи желательно решать самостоятельно.
24 авг 11, 10:00    [11169079]     Ответить | Цитировать Сообщить модератору
 Re: Поиск совпадения последовательностей знаков в столбце  [new]
Яковлев Михаил
Guest
А если так?

+
declare @table table (id bigint, name varchar(200))

insert into @table values

(1, 'Ленина 14'),
(2, 'Кулибина 23'),
(3, 'Пумпурум 15'),
(4, 'Блока 14'),
(5, 'Петрова 42'),
(6, 'Анникова 56')

declare @test table (id_1 bigint, name_1 varchar(200))


declare @i int
set @i = 1

while @i <= (select MAX(LEN(name)) from @table)

begin
insert into @test
select ID,RIGHT(LEFT(name,@i),3) from @table t where LEN(RIGHT(LEFT(name,@i),3)) = 3
set @i = @i + 1

end
select * from @table where id in
(select distinct t.id_1 from @test t join @test y on t.name_1 = y.name_1 and t.id_1 <> y.id_1)
24 авг 11, 10:20    [11169171]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить