MariaDB
 sql >> Database >  >> RDS >> MariaDB

2 modi per restituire righe che contengono solo caratteri non alfanumerici in MariaDB

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

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:

CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

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

La capacità di espressione regolare di MariaDB 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 solo caratteri alfanumerici, quindi negarlo con NOT operatore.

SELECT c1 FROM t1 
WHERE c1 NOT REGEXP '[[:alnum:]]';

Risultato:

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

Se devi escludere un carattere specifico, puoi sempre utilizzare il NULLIF() funzione.

Ad esempio, escludiamo la stringa vuota dall'ultima riga:

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';

Risultato:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [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 NOT REGEXP '[A-Za-z0-9]';

Risultato:

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

E per rimuovere la stringa vuota:

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

Risultato:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [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.