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

2 modi per restituire righe che contengono solo caratteri alfanumerici in PostgreSQL

Di seguito sono riportati due metodi per restituire righe che contengono solo caratteri alfanumerici in PostgreSQL.

I caratteri alfanumerici sono caratteri alfabetici e caratteri numerici.

Dati di esempio

Utilizzeremo i seguenti dati per i nostri esempi:

SELECT c1 FROM t1;

Risultato:

 Music
 Live Music
 Café
 Café Del Mar
 100 Cafés
 [email protected]
 1 + 1
 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 $1.50
 Player 456
 007
 null
 
 é
 É
 é 123
 ø
 ø 123

Opzione 1:confronta con [:alnum:]

Possiamo usare ~ di PostgreSQL per confrontare il valore con un'espressione regolare.

La funzionalità di espressione regolare di PostgreSQL include il supporto per le classi di caratteri POSIX. Pertanto, possiamo usare il [:alnum:] classe di caratteri POSIX nelle nostre espressioni regolari per trovare le righe che contengono caratteri alfanumerici.

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:]]+$';

Risultato:

 Music
 Café
 007
 é
 É
 ø

Ciò restituisce solo i valori costituiti esclusivamente da caratteri alfanumerici. Se una riga contiene sia caratteri alfanumerici che non alfanumerici, non viene restituita.

Nota che il carattere spazio è considerato non alfanumerico, quindi se vogliamo includere spazi, possiamo farlo:

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:] ]+$';

Risultato:

 Music
 Live Music
 Café
 Café Del Mar
 100 Cafés
 Player 456
 007
 é
 É
 é 123
 ø
 ø 123

Per restituire tutte le righe che contengono caratteri alfanumerici (anche se la riga contiene anche caratteri non alfanumerici), possiamo farlo:

SELECT c1 FROM t1 
WHERE c1 ~ '[[:alnum:]]';

Risultato:

 Music
 Live Music
 Café
 Café Del Mar
 100 Cafés
 [email protected]
 1 + 1
 $1.50
 Player 456
 007
 é
 É
 é 123
 ø
 ø 123

Opzione 2:specifica un intervallo di caratteri

Un altro modo per farlo è specificare un intervallo di caratteri all'interno dell'espressione regolare.

Esempio:

SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9]+$';

Risultato:

 Music
 007

Noterai che questo ha restituito meno righe rispetto al nostro primo esempio. Questo perché non ho incluso il é , É o ø caratteri nel mio intervallo, quindi tutte le righe che contengono quei caratteri sono escluse dall'output.

Pertanto, vale la pena prestare particolare attenzione quando si utilizza questo metodo. Sarebbe facile escludere accidentalmente i caratteri che dovresti includere.

Tuttavia, mantenendo questa gamma, possiamo includere spazi come questo:

SELECT c1 FROM t1 
WHERE c1 ~ '^[A-Za-z0-9 ]+$';

Risultato:

 Music
 Live Music
 Player 456
 007

E possiamo usare quanto segue per includere tutte le righe che contengono caratteri del nostro intervallo (anche se contengono anche caratteri al di fuori di questo intervallo):

SELECT c1 FROM t1 
WHERE c1 ~ '[A-Za-z0-9]';

Risultato:

 Music
 Live Music
 Café
 Café Del Mar
 100 Cafés
 [email protected]
 1 + 1
 $1.50
 Player 456
 007
 é 123
 ø 123