次のような結果を返す選択が必要です。
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
そして、すべての結果が必要です。つまり、これには、'word2 word3 word1' または 'word1 word3 word2' または 3 つのその他の組み合わせを含む文字列が含まれます。
すべての単語が結果に含まれている必要があります。
かなり遅いですが、単語のいずれかを含めるための有効な方法:
SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
OR column1 LIKE '%word2%'
OR column1 LIKE '%word3%'
すべての単語が存在する必要がある場合は、これを使用します。
SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
AND column1 LIKE '%word2%'
AND column1 LIKE '%word3%'
より高速なものが必要な場合は、全文検索を検討する必要があります。これは、データベースの種類ごとに非常に固有です。
LIKE
文字列が別の文字列の部分文字列であるかどうかを判断するために を使用する場合は、検索文字列内のパターン マッチング文字をエスケープする必要があることに注意してください。
SQL ダイアレクトが をサポートしている場合はCHARINDEX
、代わりにそれを使用する方がはるかに簡単です。
SELECT * FROM MyTable
WHERE CHARINDEX('word1', Column1) > 0
AND CHARINDEX('word2', Column1) > 0
AND CHARINDEX('word3', Column1) > 0
また、これと受け入れられた回答の方法は、単語の一致ではなく部分文字列の一致のみをカバーすることに注意してください。したがって、たとえば、文字列'word1word2word3'
は引き続き一致します。
の代わりにSELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
、次のような単語の間に And を追加します。
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 And word2 And word3'
詳細については、こちらを参照して ください https://msdn.microsoft.com/en-us/library/ms187787.aspx
アップデート
フレーズを選択するには、次のように二重引用符を使用します。
SELECT * FROM MyTable WHERE Column1 CONTAINS '"Phrase one" And word2 And "Phrase Two"'
psキーワードを含む前に、まずテーブルで全文検索を有効にする必要があります。詳細については、こちらをご覧ください https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search
SELECT * FROM MyTable WHERE
Column1 LIKE '%word1%'
AND Column1 LIKE '%word2%'
AND Column1 LIKE '%word3%'
質問への編集に基づいて変更OR
されました。AND
Oracle データベースを使用している場合は、 containsクエリを使用してこれを実現できます。含むクエリは、類似クエリよりも高速です。
すべての言葉が必要なら
SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 and word2 and word3', 1) > 0
必要な言葉があれば
SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 or word2 or word3', 1) > 0
列のタイプCONTEXTのニーズ インデックスが含まれています。
CREATE INDEX SEARCH_IDX ON MyTable(Column) INDEXTYPE IS CTXSYS.CONTEXT
select * from table where name regexp '^word[1-3]$'
また
select * from table where name in ('word1','word2','word3')