SQLite
 sql >> Base de données >  >> RDS >> SQLite

3 façons de trouver des lignes contenant des lettres majuscules dans SQLite

Voici trois options pour renvoyer des lignes contenant des caractères majuscules 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 majuscules.

Option 1 :Comparer avec LOWER() Chaîne

Nous pouvons utiliser le LOWER() fonction pour comparer la valeur d'origine à son équivalent en minuscule :

SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;

Résultat :

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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 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).

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 majuscules É et Ø à moins que la valeur ne comprenne également une lettre majuscule non unicode. SQLite ne prend pas entièrement en charge les caractères Unicode. Par exemple, le LOWER() et UPPER() 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 son équivalent minuscule.

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 majuscule que nous voulons faire correspondre :

SELECT c1 FROM t1
WHERE c1 REGEXP '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Résultat :

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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é          
eCafé         
James Bond 007
JB 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 majuscules que nous voulons faire correspondre :

SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]';

Résultat :

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 007