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 example@sqldat.com#&()–[{}]:;',?/* 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'),
('example@sqldat.com'),
('1 + 1'),
('()'),
('example@sqldat.com#&()–[{}]:;'',?/*'),
('`~$^+=<>“'),
('$1.50'),
('Player 456'),
('007'),
(null),
(''),
('é'),
('É'),
('é 123'),
('ø'),
('ø 123');
SELECT c1 FROM t1; Risultato:
+----------------------+
| c1 |
+----------------------+
| Music |
| Live Music |
| Café |
| Café Del Mar |
| 100 Cafés |
| example@sqldat.com |
| 1 + 1 |
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| $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 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
+----------------------+
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 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
+----------------------+ 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 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
| é |
| É |
| ø |
+----------------------+ E per rimuovere la stringa vuota:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]'; Risultato:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| é |
| É |
| ø |
+----------------------+
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.