0

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

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

我希望生成一个查询,允许我搜索 Portfolio 何时包含在标题或 Mike 中。这两个标题不必在一起。

例如,如果我有一个名为“Portfolio A”的标题和另一个标题“Mike 的最爱”,我希望将这两个标题都返回。

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

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

如果我要输入:'Portfolio,Mike',它会搜索标题中出现的那个。

编辑:我应该更清楚一点。我相信我有必要将我的变量输入为“投资组合,迈克”,以便它找到多个值。这可能吗?

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

4

2 回答 2

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

于 2013-03-26T17:36:33.110 回答
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 + '%'
于 2013-04-04T12:56:02.693 回答