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

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

Di seguito sono riportate due opzioni per restituire righe che contengono solo caratteri non alfanumerici in PostgreSQL.

I caratteri non alfanumerici includono segni di punteggiatura come [email protected]#&()–[{}]:;',?/* e simboli come `~$^+=<>“ , oltre a spazi bianchi come spazi o caratteri di tabulazione.

Dati di esempio

Utilizzeremo i seguenti dati per i nostri esempi:

SELECT c1 FROM t1;

Risultato:

+----------------------+
| c1                   |
+----------------------+
| 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 operatore per confrontare la nostra colonna con un'espressione regolare. Usiamo questo operatore quando vogliamo specificare che il valore non corrisponde all'espressione regolare.

La capacità di espressione regolare di MySQL include il supporto per le classi di caratteri POSIX. Pertanto, possiamo usare il [:alnum:] Classe di caratteri POSIX nella nostra espressione regolare.

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

Risultato:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 

La stringa vuota è anche num-numeric, quindi quell'esempio ha restituito la riga che contiene la stringa vuota.

Possiamo escludere stringhe vuote usando NULLIF() :

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';

Risultato:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“

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:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

E per rimuovere la stringa vuota:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';

Risultato:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

In questo caso, il mio intervallo di esclusione non copriva i caratteri alfanumerici come é , É e ø , e quindi l'output non è una vera rappresentazione di caratteri non alfanumerici. Detto questo, almeno questo metodo ti dà la possibilità di specificare i caratteri esatti che desideri includere o escludere dal risultato.