Hieronder staan twee methoden voor het retourneren van rijen die alleen alfanumerieke tekens bevatten in MariaDB.
Alfanumerieke tekens zijn alfabetische tekens en numerieke tekens.
Voorbeeldgegevens
We gebruiken de volgende gegevens voor onze voorbeelden:
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;
Resultaat:
+----------------------+ | 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 | +----------------------+
Optie 1:Vergelijk met [:alnum:]
De reguliere expressiemogelijkheid van MariaDB omvat ondersteuning voor de POSIX-tekenklassen. Daarom kunnen we de [:alnum:]
. gebruiken POSIX-tekenklasse in onze reguliere expressies om de rijen te vinden die alfanumerieke tekens bevatten.
SELECT c1 FROM t1
WHERE c1 REGEXP '^[[:alnum:]]+$';
Resultaat:
+-------+ | c1 | +-------+ | Music | | Café | | 007 | | é | | É | | ø | +-------+
Dat leverde alleen die rijen op die alleen alfanumerieke tekens bevatten. Als een rij zowel alfanumerieke als niet-alfanumerieke tekens bevat, wordt deze niet geretourneerd.
Merk op dat het spatieteken als niet-alfanumeriek wordt beschouwd, en dus als we spaties willen opnemen, kunnen we dit doen:
SELECT c1 FROM t1
WHERE c1 REGEXP '^[[:alnum:] ]+$';
Resultaat:
+---------------+ | c1 | +---------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | Player 456 | | 007 | | é | | É | | é 123 | | ø | | ø 123 | +---------------+
Alle rijen retourneren die bevatten alfanumerieke tekens (zelfs als de rij ook niet-alfanumerieke tekens bevat), kunnen we dit doen:
SELECT c1 FROM t1
WHERE c1 REGEXP '[[:alnum:]]';
Resultaat:
+-------------------+ | c1 | +-------------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | $1.50 | | Player 456 | | 007 | | é | | É | | é 123 | | ø | | ø 123 | +-------------------+
Optie 2:specificeer een reeks tekens
Een andere manier om dit te doen, is door een reeks tekens in uw reguliere expressie op te geven.
Voorbeeld:
SELECT c1 FROM t1
WHERE c1 REGEXP '^[A-Za-z0-9]+$';
Resultaat:
+-------+ | c1 | +-------+ | Music | | 007 | +-------+
U zult merken dat dit minder rijen opleverde dan bij ons eerste voorbeeld. Dit komt omdat ik de é
. niet heb opgenomen , É
, of ø
tekens in mijn bereik, en dus worden alle rijen die deze tekens bevatten uitgesloten van de uitvoer.
Daarom moet u voorzichtig zijn bij het gebruik van deze methode, voor het geval u per ongeluk tekens uitsluit die u zou moeten opnemen.
Binnen dit bereik kunnen we echter spaties als deze opnemen:
SELECT c1 FROM t1
WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';
Resultaat:
+------------+ | c1 | +------------+ | Music | | Live Music | | Player 456 | | 007 | +------------+
En we kunnen het volgende gebruiken om alle rijen op te nemen die bevatten tekens uit ons assortiment (zelfs als ze ook tekens buiten dit bereik bevatten):
SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Za-z0-9]';
Resultaat:
+-------------------+ | c1 | +-------------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | $1.50 | | Player 456 | | 007 | | é 123 | | ø 123 | +-------------------+