我正在使用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(...),因为该列中的值无法预测。
答案 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