¿Cómo utilizo las clases de caracteres POSIX superior e inferior para buscar texto en MySQL?

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

  •  16-10-2019
  •  | 
  •  

Pregunta

Me gustaría buscar un cuerpo de texto para averiguar cuándo una palabra específica ha sido entubado superior. MySQL tiene una función REGEXP con la clase de caracteres POSIX [[: upper:]]., Pero para la vida de mí no puedo conseguir que se devuelve ningún resultado

Say Quiero buscar una columna para la cadena literal 'GRATIS' sólo en mayúsculas.

Digamos que la estructura de la tabla es algo como:

CREATE TABLE article_body (
id INT NOT NULL AUTO_INCREMENT,
article_id INT NOT NULL,
summary VARCHAR(255),
body_text TEXT,
PRIMARY KEY(id));

Quiero encontrar columnas body_text donde la palabra GRATIS está en mayúsculas, por ejemplo.

SELECT id, summary FROM article_body WHERE body_text REGEXP '[[:upper:]]+FREE';

Pero, por supuesto, que la sintaxis no es válida.

Ayuda?

¿Fue útil?

Solución

Desde el artículo sobre MySQL REGEXP :

REGEXP no es sensible a mayúsculas, excepto cuando se usa con cadenas binarias.

solución simple A sería utilizar la BINARIO operador:

SELECT * FROM article_body WHERE body_text REGEXP BINARY "FREE";

En cuanto a por qué su ejemplo no funciona, la forma en que interpreto es "Cualquier cadena con uno o más letra mayúscula seguida por libre", pero por supuesto es GRATIS entre mayúsculas y minúsculas allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top