web-dev-qa-db-fra.com

SÉLECTIONNER uniquement les lignes contenant uniquement des caractères alphanumériques dans MySQL

J'essaie de sélectionner toutes les lignes contenant uniquement des caractères alphanumériques dans MySQL en utilisant:

SELECT * FROM table WHERE column REGEXP '[A-Za-z0-9]';

Cependant, toutes les lignes sont renvoyées, même si elles contiennent des caractères non alphanumériques.

38
code_burgar

Essayez ce code:

SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9]+$'

Cela garantit que tous les caractères correspondent.

71
Aaron Digulla

Votre déclaration correspond à n'importe quelle chaîne contenant une lettre ou un chiffre n'importe où, même si elle contient d'autres caractères non alphanumériques. Essaye ça:

SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9]+$';

^ et $ exigent que la chaîne entière corresponde à une partie plutôt qu'à une partie de celle-ci, et + recherche 1 ou plus caractères alphanumériques.

Vous pouvez également utiliser une classe de caractères nommés si vous préférez:

SELECT * FROM table WHERE column REGEXP '^[[:alnum:]]+$';
8
John Kugelman

Essaye ça:

REGEXP '^[a-z0-9]+$'

Comme regexp n'est pas sensible à la casse sauf pour les champs binaires.

3
Yannick Motton

Il y a aussi ceci:

select m from table where not regexp_like(m, '^[0-9]\d+$')

qui sélectionne les lignes contenant des caractères dans la colonne souhaitée (ce qui est m dans l'exemple mais que vous pouvez modifier).

La plupart des combinaisons ne fonctionnent pas correctement sur les plates-formes Oracle, mais cela fonctionne. Partage pour référence future.

0
apollo