2011-11-09 10 views
6

Mi base de datos contiene una lista de números de teléfono de tipo varchar. número de teléfono puede estar en cualquiera de estos formatosNecesita una ayuda para escribir la consulta de búsqueda

12323232323 
1-232-323 2323 
232-323-2323 
2323232323 

en lugar del símbolo puede haber (),. o space Y si busco 12323232323, 1-232-323 2323, 232-323-2323 , o 2323232323, debería mostrar todos estos resultados. Necesito escribir una consulta para esto.

+0

¿Ha visto [funciones de cadena de MySQL] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html)? –

+0

¿Realmente necesita guardar el formato de los números de teléfono? ¿Ha pensado en almacenar los números de teléfono en un formato único y reformatearlos cuando los muestra en función de la configuración de localización del usuario actual? –

+1

@Phoenix Estoy de acuerdo en que quizás no desee almacenar el formato con el número, pero no creo que tenga sentido formatear según la configuración regional del usuario, por ejemplo, un número de EE. UU. En un formato alemán. Si la localización fue una preocupación, probablemente necesite almacenar el código de país y luego formatear el número en función de ese código. –

Respuesta

10

Creo que no es eficiente hacer esto en tiempo real, propongo dos opciones.

  1. limpie los datos, por lo que solo habrá un formato.

  2. agregue otra columna que contenga los datos limpios, de modo que cuando busque, busque esta columna, cuando la visualiza puede visualizar los diversos datos de formato.

+0

Exactamente esto. +1 –

2

Estoy de acuerdo con James, pero si realmente es necesario buscar la base de datos, ya que es, quizá MySQL Reemplacemos operador te llevará a donde tiene que ir. Algo así como

select * from mytable where replace(crazynumber,'-','')='23232323'; 
+0

funciona bien para reemplazar un solo carácter. ¿Es posible reemplazar una matriz de cadena? En mi caso, puede haber '(),. o espacio' en lugar de '-'. – Juice

+0

intenté con una matriz como esta '" donde replace (c.customers_telephone, '". $ Chars."', '') = '". $ onlynumbers. "'"; 'y obtengo una consulta como esta' where replace (c.customers_telephone,' Array ',' ') =' 2323232323'' – Juice

+2

Tenga en cuenta que si sigue esta ruta, no puede usar un índice para acelerar su consulta; obligará a MySQL a realizar un escaneo de tabla completo para CADA consulta. Recomiendo encarecidamente que desinfecte sus datos en su lugar. –

Cuestiones relacionadas