Oracle
 sql >> Database >  >> RDS >> Oracle

4 modi per trovare righe che contengono lettere maiuscole in Oracle

Ecco quattro opzioni per restituire le righe che contengono caratteri maiuscoli in Oracle Database.

Dati campione

Supponiamo di avere una tabella con i seguenti dati:

SELECT c1 FROM t1;

Risultato:

CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 123
é
é 123
ø
Ø

Possiamo usare i seguenti metodi per restituire le righe che contengono lettere maiuscole.

Opzione 1:confronta con una classe di caratteri POSIX

REGEXP_LIKE di Oracle la condizione è conforme allo standard delle espressioni regolari POSIX e alle Linee guida per le espressioni regolari Unicode. Possiamo quindi usare il [:upper:] Classe di caratteri POSIX per verificare la presenza di caratteri maiuscoli:

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

Risultato:

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

Opzione 2:confronta con LOWER() Stringa

Possiamo usare il LOWER() funzione per confrontare il valore originale con il suo equivalente minuscolo:

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

Risultato:

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

Utilizzando il diverso a (<> ) operatore (puoi in alternativa usare != invece di <> se preferisci), restituiamo solo quelle righe che sono diverse dai loro equivalenti minuscoli. Il motivo per cui lo facciamo è perché, se un valore è uguale al suo equivalente minuscolo, all'inizio era già minuscolo (e non vogliamo restituirlo).

Per impostazione predefinita, Oracle esegue una ricerca con distinzione tra maiuscole e minuscole, quindi non è necessario eseguire nient'altro sulla query per renderla sensibile alle maiuscole.

Opzione 3:confronta con i caratteri reali

Un'altra opzione è usare REGEXP_LIKE condizione con un modello di espressione regolare che includa esplicitamente ogni carattere maiuscolo che vogliamo abbinare:

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

Risultato:

CAFÉ
Café
eCafé
James Bond 007
JB 007

Il 'c' specifica la corrispondenza con distinzione tra maiuscole e minuscole e con accento, anche se le regole di confronto determinate della condizione sono senza distinzione tra maiuscole e minuscole o senza accento.

Questa volta vengono restituite meno righe rispetto agli esempi precedenti. Questo perché non ho specificato caratteri come É e Ø , che sono stati restituiti in quegli esempi. Il nostro risultato contiene É ma quella riga è stata restituita solo perché contiene anche altri caratteri maiuscoli che fa corrispondenza.

Pertanto, se utilizzi questa opzione, dovrai assicurarti di aver coperto tutti i caratteri validi.

Eccolo di nuovo con quei due personaggi inclusi:

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

Risultato:

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

Opzione 4:confronta con un intervallo di caratteri

Un altro modo per farlo è specificare l'intervallo di caratteri maiuscoli che vogliamo abbinare:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[A-Z]', 'c');

Risultato:

CAFÉ
Café
eCafé
James Bond 007
JB 007