我正在尝试编写一个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(如果有任何区别)。
答案 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)
您可能想省略内部查询中的条件之一,但我认为这就是您想要的。