SQL Server: как найти наиболее распространенную строку в поле? - PullRequest
4 голосов
/ 24 мая 2011

У меня есть таблица с 1 000 000 записей и я хотел бы найти наиболее распространенную подстроку длиной не менее 5 символов.

Если у меня есть следующие записи:

KDHFOUDHGOENWFIJ 1114H4363SDFHDHGFDG
GSDLGJSLJSKJDFSG 1114H20SDGDSSFHGSLD
SLSJDHLJKSSDJFKD 1114HJSDHFJKSDKFSGG

Я хотел бы написать в SQL оператор, который выбирает 1114H в качестве наиболее обычной подстроки. Как я могу это сделать?

Примечания:

  • Подстрока не обязательно должна быть в одном месте.
  • Подстроки должны быть длиной 5
  • Максимальная длина каждой записи составляет 50 символов

Ответы [ 2 ]

4 голосов
/ 17 июля 2011

Нет необходимости искать самую длинную подстроку, поэтому каждая подстрока длиной более 5 всегда будет иметь подстроку из 5 символов, что соответствует количеству. Таким образом, нам нужно только проверить подстроки длиной 5.

В примерах данных есть три строки, которые встречаются три раза. _1114H, _1114 и 1114H (_ - показать местоположение пробела ).

В этом решении master..spt_values используется вместо таблицы чисел.

declare @T table
(
  ID int identity,
  Data varchar(50)
)

insert into @T values
('KDHFOUDHGOENWFIJ 1114H4363SDFHDHGFDG'),
('GSDLGJSLJSKJDFSG 1114H20SDGDSSFHGSLD'),
('SLSJDHLJKSSDJFKD 1114HJSDHFJKSDKFSGG')

select top 1 substring(T.Data, N.Number, 5) as Word
from @T as T
  cross apply (select N.Number
               from master..spt_values as N
               where N.type = 'P' and
                     N.number between 1 and len(T.Data)-4) as N
group by substring(T.Data, N.Number, 5)                      
order by count(distinct id) desc

Результат:

Word
------
 1114
3 голосов
/ 24 мая 2011

Это не полностью отвечает на ваш вопрос, но вот статья из книги о методах расширенного поиска, где упоминается пользовательская функция "LCS" (самая длинная общая подстрока), которая может быть полезна:

http://books.google.com/books?id=wGwVkAt79bEC&pg=PA248&lpg=PA248&dq=sql+full+text+common+substring&source=bl&ots=fveHa8an08&sig=VTWHQDTA6gqSNylY9oR0mPhcP6Y&hl=en&ei=iALcTd_AB-j00gG3iZ3lDw&sa=X&oi=book_result&ct=result&resnum=1&ved=0CBoQ6AEwAA#v=onepage&q&f=false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...