如何编写A包含的MySQL查询("a"或"b")

Hao*_*Hao 17 mysql

我必须使用这种格式where A operand B.A是领域; 我希望B是"文本1"或"文本2",因此如果A具有"text 1 texttext"或"texttext 2"之类的数据,则查询将具有结果.

但是我该怎么写呢?MySQL是否支持类似的东西

where A contains ('text 1' OR 'text 2')? `
Run Code Online (Sandbox Code Playgroud)

Spu*_*ley 34

两种选择:

  1. 使用LIKE关键字以及字符串中的百分号

    select * from table where field like '%a%' or field like '%b%'.
    
    Run Code Online (Sandbox Code Playgroud)

    (注意:如果您的搜索字符串包含百分号,则需要将它们转义)

  2. 如果您正在寻找比您在示例中指定的更复杂的字符串组合,则可以使用正则表达式(正则表达式):

    有关如何使用它们的更多信息,请参阅MySQL手册:http://dev.mysql.com/doc/refman/5.1/en/regexp.html

其中,使用LIKE是最常用的解决方案 - 它是标准的SQL,并且是常用的.正则表达式不太常用但功能更强大.

请注意,无论您选择哪种方式,都需要了解可能的性能影响.搜索这样的子字符串意味着查询必须扫描整个表.如果你有一个大表,这可能会导致一个非常慢的查询,并且没有任何索引可以提供帮助.

如果这对你来说是一个问题,并且你需要反复搜索相同的东西,你可能更愿意做一些事情,比如在表格中添加一个标志字段,指定字符串字段包含相关的子字符串.字符串.如果在插入更新记录时将此标志字段保持为最新状态,则只需在要搜索时查询该标志即可.这可以编入索引,并使您的查询更快.是否值得付出努力取决于你,这取决于性能的糟糕程度LIKE.


ale*_*lex 6

您可以像这样编写查询:

SELECT * FROM MyTable WHERE (A LIKE '%text1%' OR A LIKE '%text2%')
Run Code Online (Sandbox Code Playgroud)

%是一个通配符,意味着它搜索列A包含text1text2的所有行

  • 老实说,我不确定这是否可以在你的约束中...当我们比较两个完全不同的模式时,我们应该分别比较它们,并且布尔OR存在以便我们可以做到这一点.我不知道任何MySQL比较允许我们只用一个运算符对两种模式中的任何一种进行比较. (2认同)