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

4 modi per trovare righe che contengono lettere minuscole in Oracle

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

Dati di esempio

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 utilizzare il [:lower:] Classe di caratteri POSIX per verificare la presenza di caratteri minuscoli:

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

Risultato:

Café
café
1café
eCafé
James Bond 007
é
é 123
ø

Opzione 2:confronta con UPPER() Stringa

Possiamo usare UPPER() funzione per confrontare il valore originale con il suo equivalente maiuscolo:

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

Risultato:

Café
café
1café
eCafé
James Bond 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 maiuscoli. Il motivo per cui lo facciamo è perché, se un valore è uguale al suo equivalente maiuscolo, all'inizio era già maiuscolo (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 il REGEXP_LIKE condizione con un modello di espressione regolare che includa esplicitamente ogni carattere minuscolo che vogliamo abbinare:

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

Risultato:

Café
café
1café
eCafé
James Bond 007

Il 'c' specifica la distinzione tra maiuscole e minuscole e l'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 minuscoli 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é
1café
eCafé
James Bond 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é
1café
eCafé
James Bond 007