Comment puis-je utiliser les classes de caractères POSIX supérieur et inférieur pour rechercher du texte dans MySQL?

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

  •  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?

Était-ce utile?

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à.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top