我有一张包含1,000,000条记录的表格,我希望找到最常见的至少5个字符的子字符串。
如果我有以下条目:
KDHFOUDHGOENWFIJ 1114H4363SDFHDHGFDG
GSDLGJSLJSKJDFSG 1114H20SDGDSSFHGSLD
SLSJDHLJKSSDJFKD 1114HJSDHFJKSDKFSGG
我想在SQL中编写一个语句,选择1114H
作为最常见的子字符串。我怎么能这样做?
注意:
答案 0 :(得分:4)
不需要找到最长的子字符串,因此每个长度大于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
答案 1 :(得分:2)
这并没有完全回答你的问题,但这里有一篇关于高级搜索技术的书,其中提到了一个可能有用的用户定义函数“LCS”(最长公共子字符串):