Ste*_*GSD 6 sql database sql-server
我有一个包含 1,000,000 多条记录的表,我想找到长度至少为 5 个字符的最常见子字符串。
如果我有以下条目:
KDHFOUDHGOENWFIJ 1114H4363SDFHDHGFDG
GSDLGJSLJSKJDFSG 1114H20SDGDSSFHGSLD
SLSJDHLJKSSDJFKD 1114HJSDHFJKSDKFSGG
Run Code Online (Sandbox Code Playgroud)
我想用 SQL 编写一条语句来选择1114H
最常见的子字符串。我怎样才能做到这一点?
笔记:
不需要找到最长的子字符串,因此每个长度大于 5 的子字符串将始终有一个 5 个字符的子字符串,与计数相等。所以我们只需要检查长度为5的子串。
在示例数据中,有 3 个字符串出现了 3 次。 _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
Run Code Online (Sandbox Code Playgroud)
结果:
Word
------
1114
Run Code Online (Sandbox Code Playgroud)