使用CONTAINS在表格中查找项目

时间:2018-08-16 04:06:51

标签: sql contains sql-server-2016 table-variable freetext

我正在尝试编写一个SP,该SP将允许用户搜索多个名称字符串,但支持LIKE功能。例如,用户的输入可能是字符串“ Scorsese,Kaurismaki,Tarkovsky”。我使用split函数将该字符串转换为具有一列的表var,如下所示:

part
------
Scorsese
Kaurismaki
Tarkovsky

然后,通常我会使用IN语句从表中返回与表var中的任何这些值匹配的任何值:

select * from myTable where lastName IN (select * from @myTableVar)

但是,这仅返回完全匹配项,而我需要返回部分匹配项。我正在寻找这样的东西,但实际上可以编译:

select * from myTable where CONTAINS(lastName, select * from @myTableVar)

我发现还有其他问题,明确表明您不能将LIKE和IN结合使用,建议使用CONTAINS。我的具体问题是,是否可以将CONTAINS与如上所述的值列表结合起来?如果是这样,该语法将是什么样?如果没有,还有其他解决方法可以实现我的目标?

我正在使用SQL Server 2016(如果有任何区别)。

3 个答案:

答案 0 :(得分:2)

您可以使用EXISTS

SELECT * FROM myTable M
WHERE 
    EXISTS( SELECT * FROM @myTableVar V WHERE M.lastName like '%'+ V.part +'%' )

答案 1 :(得分:0)

您的解析器可以构建整个语句吗?会得到您想要的东西吗?

select * 
from myTable 
where CONTAINS
(lastName, 
'"Scorsese" OR "Kaurismaki" OR "Tarkovsky"'
)

答案 2 :(得分:0)

这可以通过结合使用CHARINDEX函数和EXISTS来完成:

select *
from myTable mt
where exists(select 1 from @myTableVar
             where charindex(mt.lastName, part) > 0
                or charindex(part, mt.lastName) > 0)

您可能想省略内部查询中的条件之一,但我认为这就是您想要的。