我需要一个选择,它将返回如下结果:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
我需要所有的结果,即这包括字符串'word2 word3 word1'或'word1 word3 word2'或任何其他组合的三个。
结果中必须包含所有的单词。
我需要一个选择,它将返回如下结果:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
我需要所有的结果,即这包括字符串'word2 word3 word1'或'word1 word3 word2'或任何其他组合的三个。
结果中必须包含所有的单词。
当前回答
将SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'替换为在这些单词之间添加And:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 And word2 And word3'
详细信息请参见CONTAINS (Transact-SQL)。
在选择短语时,使用双引号:
SELECT * FROM MyTable WHERE Column1 CONTAINS '"Phrase one" And word2 And "Phrase Two"'
附注:在使用contains关键字之前,您必须首先在表上启用全文检索。有关更多详细信息,请参见全文搜索入门。
其他回答
注意,如果使用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'
详细信息请参见CONTAINS (Transact-SQL)。
在选择短语时,使用双引号:
SELECT * FROM MyTable WHERE Column1 CONTAINS '"Phrase one" And word2 And "Phrase Two"'
附注:在使用contains关键字之前,您必须首先在表上启用全文检索。有关更多详细信息,请参见全文搜索入门。
相当缓慢,但工作方法包括任何单词:
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%'
如果您想要更快,您需要研究全文搜索,这对于每种数据库类型都是非常特定的。
用"in"代替:
Select *
from table
where columnname in (word1, word2, word3)
SELECT * FROM MyTable WHERE
Column1 LIKE '%word1%'
AND Column1 LIKE '%word2%'
AND Column1 LIKE '%word3%'
根据编辑问题将OR更改为AND。