Как использовать классы персонажей POSIX, чтобы найти текст в MySQL?

dba.stackexchange https://dba.stackexchange.com/questions/2522

  •  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";

Что касается того, почему ваш пример не работает, то, как я интерпретирую его, «любая строка с одной или несколькими заглавными буквами, за которыми следует бесплатно», но, конечно, бесплатно, нечувствительно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top