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

4 façons de trouver des lignes contenant des lettres majuscules dans Oracle

Voici quatre options pour renvoyer des lignes contenant des caractères majuscules dans Oracle Database.

Exemple de données

Supposons que nous ayons un tableau avec les données suivantes :

SELECT c1 FROM t1;

Résultat :

CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 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

REGEXP_LIKE d'Oracle condition est conforme à la norme d'expression régulière POSIX et aux directives d'expression régulière Unicode. On peut donc utiliser le [:upper:] Classe de caractères POSIX pour vérifier les caractères majuscules :

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:upper:]]');

Résultat :

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

Option 2 : Comparer avec le 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 :

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, Oracle effectue une recherche sensible à la casse, et je n'ai donc rien d'autre à faire à la requête pour la rendre sensible à la casse.

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

Une autre option consiste à utiliser le REGEXP_LIKE condition 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 REGEXP_LIKE(c1, '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Résultat :

CAFÉ
Café
eCafé
James Bond 007
JB 007

Le 'c' spécifie la correspondance sensible à la casse et aux accents, même si le classement déterminé de la condition est insensible à la casse ou aux accents.

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 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, vous devrez vous assurer que tous les caractères valides sont couverts si vous utilisez cette option.

Le voici à nouveau avec ces deux caractères inclus :

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Résultat :

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

Option 4 :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 REGEXP_LIKE(c1, '[A-Z]', 'c');

Résultat :

CAFÉ
Café
eCafé
James Bond 007
JB 007