PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

4 modi per trovare righe che contengono caratteri maiuscoli in PostgreSQL

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