2012-11-13 2 views
1

Je souhaite effectuer une recherche dans une table d'externalisation, qui possède une colonne de téléphone, mais dans la base de données, les numéros de téléphone n'ont pas de schéma. Ainsi le numéro de téléphone est varchar et a beaucoup de char (par exemple: "", -, +, /)Afficher/n'aimer que les numéros (numéros de téléphone sélectionnés)

Faites-le mysql requête ce qui ne peut aimer que des nombres dans varchar?

Example: 
input: 30321321 

Database: 
+36-30/321 32-1 
70/32132131 
0630-32-13-21 

Mon idée:

Select * from foo where phone like "%3%0%3%2%1%3%2%1%"; 

Tout cela est laid et de ressources. La base de données contient 100000 lignes et 2 colonnes de téléphones.

Une meilleure idée?

+0

pouvez-vous essayer MATCH (PHONE) CONTRE? Mais vous devez vous assurer que votre db est dans le format de l'index fulltext :) Une meilleure solution serait select * from foo WHERE téléphone REGEXP 'pattern' – bonCodigo

+0

Pourriez-vous ajouter une nouvelle colonne où vous ne stockez que des numéros, et utilisez-la colonne à rechercher? – MikeSmithDev

Répondre

-1

J'utiliser REGEXP ... (Je suppose que maintenant j'ai deux problèmes :))

Essayez ceci:

SELECT * FROM foo WHERE phone REGEXP '3(.)?0(.)?3(.)?2(.)?1(.)?3(.)?2(.)?1'

Note: Ceci ignorerait tout indexé défini sur la colonne de téléphone , donc soyez prudent si vous l'utilisez contre une table avec beaucoup de lignes.

+0

Je pense que le PO cherche des façons de trouver un numéro de téléphone * particulier *, par opposition aux chaînes qui peuvent représenter un numéro de téléphone valide. – dasblinkenlight

+0

Mais le _REGEXP_ est-il plus consommateur de ressources que simplement _LIKE_? – Csaba504

+0

Son pire que 'LIKE': 0 – Chandu

Questions connexes