2015-11-13 3 views
1

У меня есть словарь база данных, в которой каждый entery выглядит как этотMySQL - Select *, где подстрока находится перед полукоксом

column 
word; synonym; synonym | example of usage; example of usage 

Я хочу сделать функцию выбора, которая будет только получить строку, если она появляется в первая часть данных (слова и синонимов), а не в примерах использования (как есть больше слов там)

Я пытался сделать это с REGEXP

SELECT * FROM dictionary WHERE column REGEXP '[^\|]*word.*\|.*' 

Но для некоторого ре так как это соответствует всем в таблицах - даже там, где слово вообще не появляется.

Что я делаю неправильно?

+0

Почему у вас есть все, забитое в один столбец, вместо разных столбцов для разных частей данных? – Barmar

+0

Используйте только ''^[^ |] * word'' или ''^ [^ |] * [[: <:]]word[[:>:]]''. –

+0

К сожалению, мне это дано. –

ответ

1

Для использования специальных символов в регулярном выражении MySQL вам нужно использовать двойные слэши. Таким образом, ваш \| рассматривается как | и вы сопоставляете каждое пустое пространство перед каждым символом в каждой строке.

Я предлагаю просто проверить, если word появляется перед | с

'^[^|]*word' 

или - если вам нужен весь чек слово:

'^[^|]*[[:<:]]word[[:>:]]' 

Регулярное выражение соответствует ...

  • ^ - начало строки
  • [^|]* - ведущий границы слова
  • word - - 0 или больше, чем другие |
  • [[:<:]] символов буквального последовательность букв
  • [[:>:]] - буксируемая границу слова.

Кроме того, это регулярное выражение по умолчанию не зависит от регистра. Чтобы сделать его чувствительным к регистру, используйте ключевое слово BINARY.

SELECT * FROM dictionary WHERE column REGEXP BINARY '^[^|]*[[:<:]]word[[:>:]]' 
0

Что я делаю неправильно?

У вас нет базы данных. У вас есть 3 типа информации (слово, синоним, использование), зажатые в один столбец в одной строке.

Вам нужна таблица слова - пары синонимов
Вам нужны таблица слова - пары использования
Вы, вероятно, нужны словом - определение пара таблица

Выполните все синтаксический перед тем вставки данных в столы.

Смежные вопросы