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