我需要一个选择,它将返回如下结果:

SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'

我需要所有的结果,即这包括字符串'word2 word3 word1'或'word1 word3 word2'或任何其他组合的三个。

结果中必须包含所有的单词。


当前回答

注意,如果使用LIKE来确定一个字符串是否是另一个字符串的子字符串,则必须转义搜索字符串中的匹配字符的模式。

如果你的SQL方言支持CHARINDEX,那么使用它会更容易:

SELECT * FROM MyTable
WHERE CHARINDEX('word1', Column1) > 0
  AND CHARINDEX('word2', Column1) > 0
  AND CHARINDEX('word3', Column1) > 0

另外,请记住,这和接受的答案中的方法只涵盖子字符串匹配,而不是单词匹配。因此,例如,字符串'word1word2word3'仍然会匹配。

其他回答

select * from table where name regexp '^word[1-3]$'

or

select * from table where name in ('word1','word2','word3')

如果你只是想找到匹配。

SELECT * FROM MyTable WHERE INSTR('word1 word2 word3', Column1)<>0

SQL服务器:

CHARINDEX(Column1, 'word1 word2 word3', 1)<>0

得到精确匹配。例子:(ab;;;交流;,;b)将不会匹配。

SELECT * FROM MyTable WHERE INSTR(';word1;word2;word3;', ';'||Column1||';')<>0

尝试在SQL Server的全文索引中使用“Tesarus搜索”。如果您有数百万条记录,这比在搜索中使用“%”要好得多。Tesarus的内存消耗比其他的小。

尝试搜索这个函数:)

Use:

SELECT * FROM MyTable WHERE Column1 Like "*word*"

这将显示column1的部分值包含word的所有记录。

SELECT * FROM MyTable WHERE 
Column1 LIKE '%word1%'
AND Column1 LIKE '%word2%'
AND Column1 LIKE  '%word3%'

根据编辑问题将OR更改为AND。