如何解决SQL查询返回找到的任何单词
我需要编写一个SQL查询,该查询将为我返回在给定搜索条件的字符串中找到的确切单词。
字符串前:Hello1 Hi1 Hello2 Hi2 Hey1
搜索条件1:Hello
结果:Hello1,Hello2
搜索条件2:Hi
结果:Hi1,Hi2
搜索条件3:Hey
结果:Hey1
有人可以帮我吗?
解决方法
一个选项使用string_split()
(从SQL Server 2016开始可用)将短语拆分为派生的单词表,然后将其与关键字进行比较。
假设字符串存储在表mystring
的列mytable
中,您将执行以下操作:
select value
mytable t
cross apply string_split(t.mystring,' ')
where value like 'Hello%'
,
您可以使用使用%'part_of_returned_value'%的基本查询。 %'---'%的作用类似于“包含”。
select u.values from mytable
where u.values like %'hello'%
,
将要搜索的值存储在表中,并将关键字存储在表中。在某些列中搜索这些关键字,然后将关键字替换为您选择的字符。您可以使用replace
搜索它们。然后再次使用replace
并删除用于替换关键字的字符,并比较字符串的长度,以查看当删除用于替换关键字的字符并知道找到了多少个关键字时,字符串缩短了多少
这是一个有效的示例,如果您想使用多个关键字,则还可以假设每个搜索条件都包含多个关键字。
declare @keywords table ( -- the words we want to find
Keyword nvarchar(max),KeywordGroupID int
)
insert into @keywords select 'Hello',1 union select 'Hi',2 union select 'Hey',3
declare @values table ( -- the strings we want to search
SearchID int identity(1,1),Val nvarchar(max),KeywordGroupID int
)
insert into @values select 'Hello1 Hi1 Hello2 Hi2 Hey1',1 union select 'Hello1 Hi1 Hello2 Hi2 Hey1',2 union select 'Hello1 Hi1 Hello2 Hi2 Hey1',3
select
res.SearchID,res.Val,res.FoundKeywords,res.SearchCriteria
from (
select
Val,sum(cast(len(IdentifiedKeywords)-len(replace(IdentifiedKeywords,'$','')) as int)) FoundKeywords,KeywordGroupID,keywordslist.list as SearchCriteria,SearchID
from (
select
v.Val,v.SearchID,k.Keyword,replace(v.Val,'$') IdentifiedKeywords,v.KeywordGroupID
from @values v
cross apply
(
select Keyword
from @keywords K1
where v.KeywordGroupID = K1.KeywordGroupID
) k
) K2
cross apply
( -- build comma delimited list of the search criteria (key words)
select
STUFF(( SELECT ',' + Keyword + ','
FROM @keywords K3
where K2.KeywordGroupID = K3.KeywordGroupID
FOR
XML PATH('')
),1,'') AS list
) keywordslist
group by Val,keywordslist.list,SearchID
) res
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。