如何将分隔的字符串空间传递给存储过程并过滤结果?
我正在尝试这样做
parameter value
__________________
@query key1 key2 key 3
然后在存储过程中,我想先
另一个例子:
col1 | col2 | col3
------------+-----------------------+-----------------------------------
hello xyz | abc is my last name | and I'm a developer
hello xyz | null | and I'm a developer
如果我搜索任何后续内容,它应该返回每个?
我正在使用SQL Server 2016.我尝试使用split_string
来拆分查询字符串。但我不知道如何将其传递给存储过程。
提前致谢
答案 0 :(得分:1)
全文索引是可行的方法,但这会返回结果。
一个警告(我能想到)。如果您的搜索表达式/模式包含列名,则会生成误报
Declare @YourTable table (col1 varchar(50),col2 varchar(50),col3 varchar(50))
Insert Into @YourTable values
('hello xyz','abc is my last name','and I''m a developer'),
('hello xyz', null ,'and I''m a developer')
Declare @Search varchar(max) = 'xyz abc'
Select A.*
From @YourTable A
Cross Apply (Select FullString=(Select A.* FOR XML Raw)) B
Where FullString like '%'+replace(@Search,' ','%')+'%'
返回
col1 col2 col3
hello xyz abc is my last name and I'm a developer
编辑 - 多字/任意订单搜索
试试这个没有经过全面测试。我无法想象这是非常有效的,特别是对于更大的表和众多关键词
Declare @YourTable table (col1 varchar(50),col2 varchar(50),col3 varchar(50))
Insert Into @YourTable values
('hello xyz','abc is my last name','and I''m a developer'),
('hello xyz', null ,'and I''m a developer')
Declare @Search varchar(max) = 'developer xyz'
Select *
From (
Select Distinct A.*
,Hits = sum(sign(charindex(C.Value,B.FullString))) over (partition by B.FullString)
,Req = C.Req
From @YourTable A
Cross Apply (Select FullString=(Select A.* FOR XML Raw)) B
Join (Select *,Req=sum(1) over () From String_Split(@Search,' ') ) C on charindex(C.Value,B.FullString)>0
) A
Where Hits=Req
http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=c77123a71c810716b36d73a92ac714eb