“Where”语句:匹配单个单词(不是子字符串)

时间:2011-11-16 14:03:18

标签: mysql sql database

我正在使用MySQL。

我的数据库中有一个 car 表,该表中有一个name列。

假设表的name列包含值:

 +----------+
 |   name   |
 +----------+
 | AAA BB   |
  ----------
 | CC D BB  |
  ----------
 | OO kk BB |
  ----------
 | PP B CC  |
  ----------

我想搜索name列值包含单词 BB ”(不是子字符串)的表格,实现此目的的SQL命令是什么?

我知道 LIKE ,但它用于匹配包含的子字符串,而不是字匹配。

P.S。

我的表包含大量数据。所以,我可能需要一种比使用LIKE

更有效的方法

name列中的值是随机字符串。

请不要让我使用 IN(...),因为该列中的值无法预测。

2 个答案:

答案 0 :(得分:5)

试试这个WHERE子句:

WHERE name LIKE '% BB %'
OR    name LIKE 'BB %'
OR    name LIKE '% BB'
OR    name = 'BB'

请注意,如果您的表很大,这将无法正常运行。如果您需要更好的表现,您可能还需要考虑full-text search

答案 1 :(得分:2)

您可以使用MySQL中的REGEXP operator

SELECT *
FROM car
WHERE name REGEXP '[[:<:]]BB[[:>:]]'

如果它出现在一个单词中,它将匹配BB。从MySQL手册:

  
      
  • [[:<:]], [[:>:]]

         

    这些标记代表字边界。它们分别匹配单词的开头和结尾。单词是一系列单词字符,其前面或后面没有单词字符。单词字符是alnum类中的字母数字字符或下划线(_)。

    mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
    mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0
    
  •