Recherche de numéros de téléphone dans mysql

J'ai une table qui est plein d'arbitraire, numéros de téléphone au format, à l'instar de ce

027 123 5644
021 393-5593
(07) 123 456
042123456

J'ai besoin de rechercher un numéro de téléphone à un de la même façon arbitraire format ( par exemple, 07123456 doit trouver l'entrée (07) 123 456

La façon dont je le ferais dans un langage de programmation est de supprimer tous les chiffres de la 'aiguille', puis allez à travers chaque nombre dans la botte de foin, bande de tous les non-chiffres hors de lui, puis de le comparer à l'encontre de l'aiguille, par exemple, (en ruby)

digits_only = lambda{ |n| n.gsub /[^\d]/, '' }

needle = digits_only[input_phone_number]
haystack.map(&digits_only).include?(needle)

Le hic, c'est que j'ai besoin de le faire dans MySQL. Il a une foule de fonctions de chaîne, aucune ne semble vraiment à faire ce que je veux.

Actuellement je ne peux penser à de 2 "solutions"

  • Hack ensemble un franken-requête de CONCAT et SUBSTR
  • Insérer un % entre chaque caractère de l'aiguille ( c'est comme cela: %0%7%1%2%3%4%5%6% )

Cependant, aucune de ces semblent comme particulièrement élégant solutions.
J'espère que quelqu'un peut aider ou j'ai peut-être forcé à utiliser le %%%%%% solution

Mise à jour: C'est de l'exploitation sur une période relativement fixe de données, avec peut-être quelques centaines de lignes. Je n'avais juste pas envie de faire quelque chose de ridiculement mauvais qu'à l'avenir les programmeurs pleurer.

Si le jeu de données grandit, je vais prendre le 'phoneStripped' approche. Merci pour tous les commentaires!


pourriez-vous utiliser une fonction "remplacer" de supprimer toutes les instances de "(", "-" et " ",

Je ne suis pas préoccupé par le résultat numérique.
Les personnages principaux, j'ai besoin à considérer sont +, -, (, ) et space
Alors qu'solution ressembler à ceci?

SELECT * FROM people 
WHERE 
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(phonenumber, '('),')'),'-'),' '),'+')
LIKE '123456'

N'est-ce pas terriblement lent?

source d'informationauteur Orion Edwards