Nedan finns två metoder för att returnera rader som endast innehåller icke-alfanumeriska tecken i MariaDB.
Icke-alfanumeriska tecken inkluderar skiljetecken som example@sqldat.com#&()–[{}]:;',?/* och symboler som `~$^+=<>“ , såväl som blanksteg som blanksteg eller tabbtecken.
Exempeldata
Vi använder följande data för våra exempel:
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; Resultat:
+----------------------+
| 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 |
+----------------------+ Alternativ 1:Jämför med [:alnum:]
MariaDB:s reguljära uttryckskapacitet inkluderar stöd för POSIX-teckenklasserna. Därför kan vi använda [:alnum:] POSIX-teckenklass i våra reguljära uttryck för att hitta de rader som bara innehåller alfanumeriska tecken, förneka sedan det med NOT operatör.
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[[:alnum:]]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
+----------------------+
Om du behöver utesluta ett specifikt tecken kan du alltid använda NULLIF() fungera.
Låt oss till exempel utesluta den tomma strängen från den sista raden:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
+----------------------+ Alternativ 2:Ange ett antal tecken
Ett annat sätt att göra det är att ange ett antal tecken i ditt reguljära uttryck.
Exempel:
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[A-Za-z0-9]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
| é |
| É |
| ø |
+----------------------+ Och för att ta bort den tomma strängen:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| é |
| É |
| ø |
+----------------------+
I det här fallet täckte inte mitt uteslutningsintervall alfanumeriska tecken som é , É och ø , och så utdata är inte en sann representation av icke-alfanumeriska tecken. Som sagt, åtminstone den här metoden ger dig möjlighet att ange exakt de tecken du vill inkludera eller utesluta från resultatet.