2011-07-29 3 views
1

J'essaie de trouver un enregistrement avec des noms qui ont des caractères non-alphanumériques.REGEXP ne fonctionne pas dans mysql

Je pensais que je pouvais le faire avec REGEXP

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Alors je mentionné une autre question SO

How can I find non-ASCII characters in MySQL?

J'ai trouvé que je pouvais utiliser cette requête:

SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9]'; 

Mais je t me renvoie zéro rangées. Si j'ai remplacé la commande à:

SELECT * FROM tableName WHERE columnToCheck REGEXP '[A-Za-z0-9]'; 

Il me renvoie toutes les lignes !!.

J'ai essayé quelques commandes de base:

SELECT 'justffalnums' REGEXP '[[:alnum:]]'; returns 1 

qui est correct, mais

SELECT 'justff?alnums ' REGEXP '[[:alnum:]]'; also returns 1 

Je ne comprends pas pourquoi il returs un. Il devrait retourner 0 car il a de l'espace et aussi un '?' .

Y a-t-il quelque chose à activer dans mysql pour que l'expression rationnelle fonctionne? J'utilise mysql 5.0 et j'ai aussi essayé avec 5.1.

Répondre

2

Vous devez ajouter ^ (chaîne commence) et $ (extrémités de chaîne) ainsi qu'un opérateur indiquant un certain nombre d'alphanum à utiliser. Ci-dessous j'ai utilisé + ce qui signifie un ou plusieurs.

SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+$'; 
-- only contains alphanumns => 0 

SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+'; 
-- just begins with alphanum => 1 

SELECT 'justff?alnums ' REGEXP '[[:alnum:]]+$'; 
-- just ends with alphanum => 0 
+0

Msg 102, niveau 15, état 1, ligne 1 syntaxe incorrecte près de '^ [[: alnum:]] + $. – KingRider

0

L'expression régulière que vous avez donnée ne dit pas que le champ entier doit contenir les caractères en question. Vous pouvez utiliser le caractère de négation ^ au début d'un jeu de caractères.

SELECT 'justff?alnums' REGEXP '[^A-Za-z0-9]'; returns 1 
SELECT 'justffalnums' REGEXP '[^A-Za-z0-9]'; returns 0