Nedenfor er to metoder til at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i MariaDB.
Ikke-alfanumeriske tegn inkluderer tegnsætningstegn såsom example@sqldat.com#&()–[{}]:;',?/* og symboler som `~$^+=<>“ , såvel som mellemrumstegn som mellemrum eller tabulatortegn.
Eksempel på data
Vi bruger følgende data til vores eksempler:
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 |
+----------------------+ Mulighed 1:Sammenlign med [:alnum:]
MariaDBs regulære udtryksevne inkluderer understøttelse af POSIX-tegnklasserne. Derfor kan vi bruge [:alnum:] POSIX-tegnklasse i vores regulære udtryk for at finde de rækker, der kun indeholder alfanumeriske tegn, og afvis derefter det med NOT operatør.
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[[:alnum:]]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
+----------------------+
Hvis du har brug for at udelukke et bestemt tegn, kan du altid bruge NULLIF() fungere.
Lad os f.eks. ekskludere den tomme streng fra den sidste række:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
+----------------------+ Mulighed 2:Angiv en række af tegn
En anden måde at gøre det på er at angive en række tegn i dit regulære udtryk.
Eksempel:
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[A-Za-z0-9]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
| é |
| É |
| ø |
+----------------------+ Og for at fjerne den tomme streng:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]'; Resultat:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| é |
| É |
| ø |
+----------------------+
I dette tilfælde dækkede mit ekskluderingsområde ikke alfanumeriske tegn som é , É og ø , og outputtet er derfor ikke en sand repræsentation af ikke-alfanumeriske tegn. Når det er sagt, giver denne metode dig i det mindste mulighed for at angive de nøjagtige tegn, du vil inkludere eller udelukke fra resultatet.