1

我正在尝试编写一个允许用户搜索多个名称字符串的 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,如果它有什么不同的话。

4

3 回答 3

3

您可以使用EXISTS

SELECT * FROM myTable M
WHERE 
    EXISTS( SELECT * FROM @myTableVar V WHERE M.lastName like '%'+ V.part +'%' )
于 2018-08-16T07:09:35.583 回答
0

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

select * 
from myTable 
where CONTAINS
(lastName, 
'"Scorsese" OR "Kaurismaki" OR "Tarkovsky"'
)
于 2018-08-16T05:34:20.123 回答
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)

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

于 2018-08-17T10:46:42.133 回答