Оператор «Где»: соответствует одному слову (не подстроке) - PullRequest
3 голосов
/ 16 ноября 2011

Я использую MySQL.

В моей базе данных есть таблица car , и в этой таблице есть столбец name.

Предположим, что столбец name таблицы содержит значения:

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

Я хотел бы найти в таблице, где name значение столбца содержит слово" BB " (не подстрока), что такое команда SQLчтобы достичь этого?

Я знаю LIKE , но он используется для сопоставления содержащейся подстроки, а не для совпадения слов.

PS

Моя таблица содержит большие данные.Поэтому мне, вероятно, нужен более эффективный способ, чем использование LIKE

Значения в столбце name являются случайными строками.

Пожалуйста, не просите меня использовать IN (...) , поскольку значения в этом столбце непредсказуемы.

Ответы [ 2 ]

5 голосов
/ 16 ноября 2011

Попробуйте это предложение WHERE:

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

Обратите внимание, что это не будет работать хорошо, если ваша таблица большая.Вы также можете рассмотреть возможность полнотекстового поиска , если вам нужна более высокая производительность.

2 голосов
/ 16 ноября 2011

Вы можете использовать REGEXP operator в MySQL:

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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...