Vous trouverez ci-dessous deux méthodes pour renvoyer des lignes contenant uniquement des caractères non alphanumériques dans MariaDB.
Les caractères non alphanumériques incluent les caractères de ponctuation tels que [email protected]#&()–[{}]:;',?/*
et des symboles comme `~$^+=<>“
, ainsi que des caractères d'espacement tels que les espaces ou les tabulations.
Exemple de données
Nous utiliserons les données suivantes pour nos exemples :
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;
Résultat :
+----------------------+ | 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 | +----------------------+
Option 1 : Comparer avec [:alnum:]
La capacité d'expression régulière de MariaDB inclut la prise en charge des classes de caractères POSIX. Par conséquent, nous pouvons utiliser le [:alnum:]
Classe de caractères POSIX dans nos expressions régulières pour trouver les lignes qui ne contiennent que des caractères alphanumériques, puis annulez cela avec le NOT
opérateur.
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[[:alnum:]]';
Résultat :
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | | +----------------------+
Si vous avez besoin d'exclure un caractère spécifique, vous pouvez toujours utiliser le NULLIF()
une fonction.
Par exemple, excluons la chaîne vide de la dernière ligne :
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';
Résultat :
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | +----------------------+
Option 2 :Spécifiez une plage de caractères
Une autre façon de procéder consiste à spécifier une plage de caractères dans votre expression régulière.
Exemple :
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[A-Za-z0-9]';
Résultat :
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | | | é | | É | | ø | +----------------------+
Et pour supprimer la chaîne vide :
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';
Résultat :
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | é | | É | | ø | +----------------------+
Dans ce cas, ma plage d'exclusion ne couvrait pas les caractères alphanumériques comme é
, É
, et ø
, et la sortie n'est donc pas une représentation fidèle des caractères non alphanumériques. Cela dit, au moins cette méthode vous donne la possibilité de spécifier les caractères exacts que vous souhaitez inclure ou exclure du résultat.