Comment puis-je utiliser les classes de caractères POSIX supérieur et inférieur pour rechercher du texte dans MySQL?
-
16-10-2019 - |
Question
Je voudrais rechercher un corps de texte pour savoir quand un mot spécifique a été tubé supérieure. MySQL a une fonction REGEXP avec la classe de caractères POSIX [[: upper:]]., Mais pour la vie de moi je ne peux pas l'obtenir à aucun résultat
dis que je veux rechercher une colonne pour le littéral de chaîne « GRATUIT » uniquement en majuscules.
Disons que la structure de la table est quelque chose comme:
CREATE TABLE article_body (
id INT NOT NULL AUTO_INCREMENT,
article_id INT NOT NULL,
summary VARCHAR(255),
body_text TEXT,
PRIMARY KEY(id));
Je veux trouver des colonnes body_text où le mot FREE est en majuscules, par exemple.
SELECT id, summary FROM article_body WHERE body_text REGEXP '[[:upper:]]+FREE';
Mais bien sûr que la syntaxe est invalide.
Aide?
La solution
De l'article sur mysql REGEXP :
REGEXP n'est pas sensible à la casse, sauf lorsqu'il est utilisé avec des chaînes binaires.
Une solution simple serait d'utiliser le BINARY opérateur:
SELECT * FROM article_body WHERE body_text REGEXP BINARY "FREE";
Quant à savoir pourquoi votre exemple ne fonctionne pas, la façon dont je l'interprète est « Toute chaîne avec une ou plusieurs lettre majuscule suivie par FREE », mais bien sûr, FREE est insensible à la casse là.