Код ошибки: 3685. Недопустимый аргумент для регулярного выражения - PullRequest
2 голосов
/ 31 января 2020

Я пытаюсь найти точное число в MySQL 8.0, используя приведенное ниже выражение SQL

SELECT * FROM rulebook.node__body 
WHERE body_value REGEXP "[[:<:]]DVP[[:>:]]";

enter image description here

, когда я выполнив вышеприведенный оператор SQL, я получаю ошибку ниже

Код ошибки: 3685. Недопустимый аргумент для регулярного выражения

Не могли бы вы, пожалуйста, кто-нибудь сказать мне, где я совершать ошибку.

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Этот вопрос, вероятно, станет более популярным, поскольку принятие MySQL 8.0 увеличится и ранее сохраненные SQL запросы с использованием REGEXP начнут ломаться.

Согласно MySQL 8.0 Справочное руководство / ... / Регулярные выражения , "MySQL реализует поддержку регулярных выражений с использованием международных компонентов для Unicode (ICU)."

Согласно MySQL 5.6 Справочное руководство / ... / Регулярные выражения , "MySQL использует реализацию регулярных выражений Генри Спенсера."

Поэтому, поскольку вы используете MySQL 8.0, а не [[:<:]] и [[:>:]], вы можете теперь используйте \b. Ваш запрос может выглядеть так:

SELECT *
  FROM `rulebook`.`node__body`
 WHERE `body_value` REGEXP "\\bDVP\\b"
     ;
0 голосов
/ 31 января 2020

Ваше регулярное выражение содержит неверную скобку. Предполагая, что вы пытаетесь найти любую строку, где body_value содержит < и DVP и >, вы можете попробовать:

SELECT * FROM rulebook.node__body 
WHERE body_value REGEXP '.*<.*DVP.*>.*';
...