0

上記の質問が可能かどうかを理解しようとしています。私はそれについて概念的に考えてきましたが、基本的に私がやろうとしていることは次のとおりです。

タイトルに表示される可能性のあるキーワードを指定します。「ポートフォリオ」と「マイク」という 2 つの用語を使用してみましょう

Portfolio がタイトルに含まれている場合に検索できるクエリを生成したいと考えています。これらの 2 つのタイトルは一緒である必要はありません。

たとえば、「Portfolio A」という名前のタイトルと、「Mike's favorite」という別のタイトルがある場合、これらのタイトルの両方を返したいと思います。

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 に答える