首页 > 解决方案 > 单个表列中的多个单词搜索

问题描述

我正在创建一个简单的文本框,允许将单个单词比较到表中。如果我在文本框中输入多个关键字,则只有一个词处理多个文本,它不会获取记录。我的数据库表是-

id text                                   keyword
1  Somting with keyword1 & Keyword3     keyword1, keyword3
2  Somting with keyword2 & Keyword3     Keyword2, Keyword3

搜索字符串就像 - 什么是 Keyword3 和 keyword1

期望的结果是在记录中显示关键字 1 和关键字 3 的 Somting

使用 c# sql

我在尝试

Create PROCEDURE [dbo].[spGetChatAutofill]
(
                @term VARCHAR(255)
)
AS
begin  

    select  id ,  text, keyword
        from tbl 
        where keyword in (select keyword from fn_stringSplit(@term) ss where keyword like '%'+SplitValue+'%')

end

和功能-

ALTER function [dbo].[fn_stringSplit](@StringSplit varchar(max))
returns @table table(SplitValue varchar(10) not null)
as
begin
    Declare @StartVal int
    Declare @endVal int
    set @StringSplit = @StringSplit + ' '
    set @StartVal = 1
    set @endVal = 1
    while @endVal >= 0
        begin
            set  @endVal = charindex(' ',@StringSplit,@StartVal);
            insert into @table select SUBSTRING(@StringSplit,@StartVal,@endVal-1)
            set @StringSplit= SUBSTRING(@StringSplit,@endVal+1, LEN(@StringSplit))
            if @StringSplit = '' set @endVal= -1
        end
    return
end

标签: c#sql

解决方案


首先,Sql Server 2017 有STRING_SPLIT

使用所有请求的关键字搜索行呈现过程。

Create PROCEDURE [dbo].[spGetChatAutofill]
(
                @term VARCHAR(255)
)
AS
begin  

    select  id,  text, keyword
        from tbl 
        where not exists(
          select 1 
          from STRING_SPLIT(@term, ' ') terms
          where tbl.keyword not like '%'+terms.value+'%')
end

请注意,这可能匹配部分关键字。例如,带有参数“key word”的调用将成功地在表中找到“keyword1,keyword2”。


推荐阅读