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.