是否可以使用LIKE语句在列中搜索多个术语?

时间:2013-03-26 17:33:02

标签: sql sql-server dynamic-sql

我试图了解上述问题是否可行。我一直在从概念上思考它,基本上我要做的是:

指定可能出现在标题中的关键字。让我们使用“投资组合”和“迈克”两个术语

我希望生成一个查询,允许我搜索投资组合包含在标题或Mike中的时间。这两个标题不需要在一起。

例如,如果我有一个名为“投资组合A”的标题和另一个标题“迈克最喜欢的”,我希望这两个标题都能被退回。

我在使用LIKE语句时遇到的问题如下:

 WHERE 1=1
 and rpt_title LIKE ''%'+@report_title+'%'''

如果我要输入:'投资组合,迈克'它将在标题内搜索该事件的发生。

编辑:我应该更清楚一点。我认为有必要将我的变量输入'Portfolio,Mike',以便找到多个值。这可能吗?

我假设你可以使用带有子串和替换的charindex?

2 个答案:

答案 0 :(得分:4)

是的,使用OR的多个Like语句可以正常工作 - 只需确保使用正确的括号:

SELECT ...
FROM ...
WHERE 1=1
 and (rpt_title LIKE '%Portfolio%' 
 or rpt_title LIKE '%Mike%') 

但是,我建议您考虑使用全文搜索。

http://msdn.microsoft.com/en-us/library/ms142571.aspx

答案 1 :(得分:0)

我可以提出一个解决方案,您可以指定任意数量的掩码,而不使用多个LIKE -

DECLARE @temp TABLE (st VARCHAR(100))
INSERT INTO @temp (st)
VALUES ('Portfolio photo'),('- Mike'),('blank'),('else'),('est')

DECLARE @delims VARCHAR(30)
SELECT @delims = '|Portfolio|Mike|' -- %Portfolio% OR %Mike% OR etc.

SELECT t.st
FROM @temp t
CROSS JOIN (
    SELECT substr = 
        SUBSTRING(
            @delims, 
            number + 1,
            CHARINDEX('|', @delims, number + 1) - number - 1)
    FROM [master].dbo.spt_values n
    WHERE [type] = N'P'
        AND number <= LEN(@delims) - 1
        AND SUBSTRING(@delims, number, 1) = '|'
) s
WHERE t.st LIKE '%' + s.substr + '%'