2011-08-08 5 views
3
des espaces blancs

Je suis en train de revenir seulement les lignes qui colA et colB ne contiennent pas un numéro ou un des espacesMySQL REGEXP Aucun Aucun numéro

Voici mon code jusqu'à présent.

SELECT * FROM table_name WHERE colA REGEXP '[^0-9^\W]' AND colB REGEXP '[^0-9^\W]' 

compte tenu de l'ensemble de données

colA  colB 
---------- ---------- 
    test | testB 
     33 | text <- this is not returned 
    blah | 0123A <- this is returned 

Je suppose mon problème est avec mon regexp ... toute aide s'il vous plaît?

Répondre

4

Eh bien votre expression ne fonctionne pas parce que: 33 est à la fois le nombre et que vous recherchez une non décimale, le caractère non des espaces blancs. donc il n'inclut pas cette ligne dans le résultat.

Essayez:

SELECT * FROM table_name WHERE colA NOT REGEXP '[0-9[:space:]]' AND colB NOT REGEXP '[0-9[:space:]]' 

ETA: Oui oublié que \ tout ce qui ne fonctionne pas

+0

Ok alors comment je puis filtrer tout ce qui contient un certain nombre .. et «juste un espace. Fondamentalement, j'ai une importation de données qui contient beaucoup de valeurs invalides. (noms qui contiennent des nombres, ou qui manquent complètement) Je veux seulement retourner des noms valides. donc 'SI VAL NE CONTIENT PAS DE NOMBRE ET N'EST PAS BLANC (OU JUSTE WHITEPACE)' Notez que les colonnes sont 'NOT NULL' signalées. Donc, je ne peux pas vérifier une valeur nulle. – rlemon

+0

Note: J'ai réévalué la portée, vous aviez raison avec cette réponse. – rlemon

+0

Ok, donc où colA LIKE "" a travaillé pour supprimer les cellules vides (qui ne sont pas nulles) – rlemon

0

Non testé, mais lui donner un essai

regexp '^[^0-9 ]+$' 
1

id suggère d'utiliser à la place Négation: not regexp '[0-9[:space:]]'

SELECT * FROM table_name WHERE colA NOT REGEXP '[0-9[:space:]]' AND colB NOT REGEXP '[0-9[:space:]]' 
1

MySQL ne supporte pas le type \whatever s'échappe pour la plupart. Si vous voulez des espaces, vous devez utiliser [[:space:]], qui est la syntaxe POSIX. Détails sur le regex man page here.

1

Une autre regex vous pouvez essayer est le suivant: regexp '[^0-9\s]'