Voici quatre options pour renvoyer des lignes contenant des caractères majuscules dans MariaDB.
Exemple de données
Supposons que nous ayons un tableau avec les données suivantes :
SELECT c1 FROM t1;
Résultat :
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | café | | 1café | | eCafé | | James Bond 007 | | JB 007 | | 007 | | NULL | | | | É | | É 123 | | é | | é 123 | | ø | | Ø | +----------------+
Nous pouvons utiliser les méthodes suivantes pour renvoyer les lignes contenant des lettres majuscules.
Option 1 :comparer à une classe de caractères POSIX
Nous pouvons utiliser le REGEXP
opérateur pour effectuer une correspondance d'un modèle d'expression régulière.
Une option simple consiste à comparer notre colonne au [:upper:]
Classe de caractères POSIX :
SELECT c1 FROM t1
WHERE c1 REGEXP '[[:upper:]]';
Résultat :
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | | É | | É 123 | | Ø | +----------------+
RLIKE
est synonyme de REGEXP
, nous pouvons donc remplacer REGEXP
avec RLIKE
pour obtenir le même résultat :
SELECT c1 FROM t1
WHERE c1 RLIKE '[[:upper:]]';
Option 2 : Comparer avec LOWER()
Chaîne
Une autre option consiste à utiliser le LOWER()
fonction pour comparer la valeur d'origine à son équivalent en minuscule :
SELECT c1 FROM t1
WHERE BINARY LOWER(c1) <> BINARY c1;
Résultat :
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | | É | | É 123 | | Ø | +----------------+
En utilisant le différent de (<>
) opérateur (vous pouvez également utiliser !=
au lieu de <>
si vous préférez), nous renvoyons uniquement les lignes qui sont différentes de leurs équivalents en minuscules. La raison pour laquelle nous faisons cela est que, si une valeur est identique à son équivalent en minuscules, alors elle était déjà en minuscules au départ (et nous ne voulons pas la renvoyer).
Par défaut, MariaDB effectue une recherche insensible à la casse, et j'utilise donc le BINARY
opérateur pour obtenir une recherche sensible à la casse.
Cela peut aussi être fait comme ceci :
SELECT c1 FROM t1
WHERE BINARY(LOWER(c1)) <> BINARY(c1);
Option 3 : Comparer avec les caractères réels
Une autre option consiste à utiliser le REGEXP
opérateur avec un modèle d'expression régulière qui inclut explicitement chaque caractère majuscule que nous voulons faire correspondre :
SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';
Résultat :
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | +----------------+
Cette fois, moins de lignes sont renvoyées que dans les exemples précédents. C'est parce que je n'ai pas spécifié de caractères comme É
et Ø
, qui ont été renvoyés dans l'exemple précédent. Notre résultat contient É
mais cette ligne n'a été renvoyée que parce qu'elle contient également d'autres caractères majuscules qui font correspondance.
Par conséquent, vous devrez vous assurer que tous les caractères valides sont couverts si vous utilisez cette option.
Option 4 :Comparer à une plage de caractères
Une autre façon de le faire est de spécifier la plage de caractères que nous voulons faire correspondre :
SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[A-Z]';
Résultat :
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | +----------------+