2012-03-24 70 views
13

Tengo una tabla con una columna phone, donde los datos pueden tener espacios, puntos, guiones o signos + entre los números. tengo que hacer una búsqueda con comodines gusta que hacen caso omiso de todos esos personajes, por ejemplo:Cómo ignorar caracteres en un MYSQL SELECT LIKE% ...%

  • un registro puede tener teléfono como "+ 123-456 78,90"
  • una consulta en busca de "6789" o cualquier la secuencia completa o incompleta de los dígitos adecuados debe mostrar ese registro.

Lamentablemente no puedo limpiar la tabla original para eliminar los caracteres que no son dígitos y hacer una simple SELECCIONAR COMO% ...%.

MYSQL tiene funciones para sustituir/eliminar caracteres de cadenas, pero no puede encontrar una manera de usarlos dentro de una consulta con un LIKE similar.

Cualquier ayuda será muy apreciada.

+0

¿Cuál es el idioma del lado del servidor? PHP? –

+1

Dice que mysql y Henry hablan de consultas;) – Martijn

Respuesta

28

Veo dos maneras de hacer esto:

  1. Si permite que sólo unos pocos caracteres adicionales que usted puede preparar una cadena que se elimina de estos caracteres adicionales y se utiliza el operador LIKE lo haría normalmente

    select * from phoneTable where replace(replace(phone, '+', ''), '-', '') LIKE '%123%' 
    

    Por supuesto que necesita la mayor cantidad reemplazar las llamadas como el número de caracteres adicionales permitidos

  2. se utiliza expresiones regulares, digamos que usted se busca un patrón 123

    select * from phoneTable where phone REGEXP '.*1[^0-9]*2[^0-9]*3' 
    
+0

Una vez que se agrega el '% ..%' a la primera opción, ambos hacen el trabajo correctamente. Muchas gracias por tu ayuda. – Henry

+0

Tienes razón, olvidé los comodines y no intenté ejecutar las consultas. Respuesta corregida – Hari

+1

supongo que la primera opción es más rápida –

4

que tenía el mismo problema con Números de serie y caracteres no deseados. Mi solución fue

SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%'; 
+3

¿cómo es esta respuesta diferente de la aceptada? – Sp0T

Cuestiones relacionadas