Voici trois options pour renvoyer des lignes contenant des caractères minuscules dans SQLite.
Exemple de données
Supposons que nous ayons un tableau avec les données suivantes :
.nullvalue null
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 minuscules.
Option 1 : Comparer avec UPPER()
Chaîne
Nous pouvons utiliser le UPPER()
fonction pour comparer la valeur d'origine à son équivalent en majuscule :
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Résultat :
c1 -------------- Café café 1café eCafé James Bond 007
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 majuscules. La raison pour laquelle nous faisons cela est que, si une valeur est identique à son équivalent en majuscule, alors elle était déjà en majuscule au départ (et nous ne voulons pas la renvoyer).
SQLite effectue une recherche sensible à la casse, et nous n'avons donc rien d'autre à faire pour obtenir le résultat souhaité.
Vous avez peut-être remarqué que l'exemple ci-dessus ne renvoyait pas les caractères Unicode minuscules é
et ø
à moins que la valeur ne comprenne également une lettre minuscule non unicode. SQLite ne prend pas entièrement en charge les caractères Unicode. Par exemple, le UPPER()
et LOWER()
Les fonctions fournissent uniquement un mappage de casse pour les 26 lettres utilisées dans la langue anglaise. Par conséquent, l'exemple ci-dessus n'a converti aucun caractère unicode en leur équivalent majuscule.
Jetez un œil à l'extension SQLite ICU si vous avez besoin de travailler avec des caractères Unicode.
Option 2 : 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 minuscule que nous voulons faire correspondre :
SELECT c1 FROM t1
WHERE c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';
Résultat :
c1 -------------- Café café 1café eCafé James Bond 007
Nous pouvons inclure des caractères unicode dans notre liste si nous le souhaitons :
SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';
Résultat :
c1 -------------- Café café 1café eCafé James Bond 007 é é 123 ø
Option 3 :Comparer à une plage de caractères
Une autre façon de le faire est de spécifier la plage de caractères minuscules que nous voulons faire correspondre :
SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';
Résultat :
c1 -------------- Café café 1café eCafé James Bond 007