我试图了解上述问题是否可行。我一直在从概念上思考它,基本上我要做的是:
指定可能出现在标题中的关键字。让我们使用“投资组合”和“迈克”两个术语
我希望生成一个查询,允许我搜索投资组合包含在标题或Mike中的时间。这两个标题不需要在一起。
例如,如果我有一个名为“投资组合A”的标题和另一个标题“迈克最喜欢的”,我希望这两个标题都能被退回。
我在使用LIKE语句时遇到的问题如下:
WHERE 1=1
and rpt_title LIKE ''%'+@report_title+'%'''
如果我要输入:'投资组合,迈克'它将在标题内搜索该事件的发生。
编辑:我应该更清楚一点。我认为有必要将我的变量输入'Portfolio,Mike',以便找到多个值。这可能吗?我假设你可以使用带有子串和替换的charindex?
答案 0 :(得分:4)
是的,使用OR的多个Like语句可以正常工作 - 只需确保使用正确的括号:
SELECT ...
FROM ...
WHERE 1=1
and (rpt_title LIKE '%Portfolio%'
or rpt_title LIKE '%Mike%')
但是,我建议您考虑使用全文搜索。
答案 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 + '%'