Ecco quattro opzioni per restituire le righe che contengono lettere maiuscole in PostgreSQL.
Dati campione
Supponiamo di avere una tabella con i seguenti dati:
SELECT c1 FROM t1;
Risultato:
c1 ---------------- CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 null É É 123 é é 123 ø Ø
Possiamo usare i seguenti metodi per restituire le righe che contengono lettere maiuscole.
Opzione 1:confronta con una classe di caratteri POSIX
Possiamo usare il ~
per eseguire una corrispondenza con distinzione tra maiuscole e minuscole di un modello di espressione regolare. Lo schema può essere semplice o complesso a piacere.
Un'opzione semplice è confrontare la nostra colonna con [:upper:]
Classe di caratteri POSIX:
SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';
Risultato:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
Opzione 2:confronta con LOWER()
Stringa
Un'altra opzione è usare LOWER()
funzione per confrontare il valore originale con il suo equivalente minuscolo:
SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;
Risultato:
c1 ---------------- 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, PostgreSQL esegue una corrispondenza con distinzione tra maiuscole e minuscole, quindi non è necessario specificare una confronto con distinzione tra maiuscole e minuscole per ottenere il risultato desiderato.
Opzione 3:confronta con i caratteri reali
Un'altra opzione è usare il ~
operatore con un modello di espressione regolare che include esplicitamente ogni carattere maiuscolo che vogliamo abbinare:
SELECT c1 FROM t1
WHERE c1 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';
Risultato:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007
In questo caso, 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, questa opzione è più limitata della precedente, ma ti offre un maggiore controllo sui personaggi che desideri abbinare.
Opzione 4:confronta con un intervallo di caratteri
Possiamo in alternativa specificare l'intervallo di caratteri che vogliamo abbinare:
SELECT c1 FROM t1
WHERE c1 ~ '[A-Z]';
Risultato:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007