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

4 façons de trouver des lignes contenant des caractères majuscules dans PostgreSQL

Voici quatre options pour renvoyer des lignes contenant des lettres majuscules dans PostgreSQL.

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 ~ Opérateur pour effectuer une correspondance sensible à la casse d'un modèle d'expression régulière. Le motif peut être aussi simple ou complexe que nous le souhaitons.

Une option simple consiste à comparer notre colonne au [:upper:] Classe de caractères POSIX :

SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';

Résultat :

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

Option 2 : Comparer avec le 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 LOWER(c1) <> 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, PostgreSQL effectue une correspondance sensible à la casse, et nous n'avons donc pas besoin de spécifier un classement sensible à la casse pour obtenir le résultat souhaité.

Option 3 : Comparer avec les caractères réels

Une autre option consiste à utiliser le ~ 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 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Résultat :

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

Dans ce cas, 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 ces exemples. 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, cette option est plus limitée que la précédente, mais elle vous offre plus de contrôle sur les caractères que vous souhaitez faire correspondre.

Option 4 :Comparer à une plage de caractères

Nous pouvons également spécifier la plage de caractères que nous voulons faire correspondre :

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

Résultat :

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