Как использовать классы персонажей POSIX, чтобы найти текст в MySQL?
-
16-10-2019 - |
Вопрос
Я хотел бы найти тело текста, чтобы выяснить, когда конкретное слово было верхним. MySQL имеет функцию REGEXP с классом символов POSIX [[: Upper:]], но для жизни я не могу заставить его вернуть какие -либо результаты.
Скажите, что я хочу найти столбец для строковой буквальной «бесплатной» только в верхнем регистре.
Допустим, структура таблицы - это нечто вроде:
CREATE TABLE article_body (
id INT NOT NULL AUTO_INCREMENT,
article_id INT NOT NULL,
summary VARCHAR(255),
body_text TEXT,
PRIMARY KEY(id));
Я хочу найти столбцы body_text, где слово бесплатно во всех прописных, например,
SELECT id, summary FROM article_body WHERE body_text REGEXP '[[:upper:]]+FREE';
Но, конечно, этот синтаксис недействителен.
Помощь?
Решение
Из статьи о Mysql regexp:
REGEXP не чувствителен к случаям, за исключением случаев, когда используется с бинарными строками.
Простым решением было бы использовать Бинарный оператор:
SELECT * FROM article_body WHERE body_text REGEXP BINARY "FREE";
Что касается того, почему ваш пример не работает, то, как я интерпретирую его, «любая строка с одной или несколькими заглавными буквами, за которыми следует бесплатно», но, конечно, бесплатно, нечувствительно.