2010-08-10 21 views
18
SELECT telephone_number 
FROM table 
WHERE telephone_number REGEXP '^1[() -]*999[() -]*999[() -]*9999$'; 

¿Cómo puedo hacer lo que su validez para cualquier formato de número y cualquier número comoexpresiones regulares MySQL en la cláusula where

407-888-0909 
1(408)998-7654 
7776654433 
876-7788 

ahora su única válida para 1-999-999-9999

+0

¿Qué quiere decir con "cualquier formato de número"? ¿Te refieres a cualquier cadena que contenga al menos un dígito? –

+0

sí pero sin el "() -" y los espacios – Trace

+2

posible duplicado de [MySQL regex en tiempo de ejecución] (http://stackoverflow.com/questions/3451567/mysql-regex-at-runtime) –

Respuesta

25

Uso:

SELECT telephone_number 
    FROM table 
WHERE telephone_number REGEXP '^1[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{4}$'; 

Referencia:

+0

¿qué ocurre si tengo un valor 6309991234 pero en la base de datos está en (630) 9991234 puedo agregar un REGEXP '^ 1 [() -] * [[: digit:]] {3} [() -] * [[: digit:]] {3} [() -] * [[: digit:]] {4} $ '= "6309991234 " – Trace

+0

@John: los paréntesis admiten" m, n ", por lo que podría usar {3,7} para capturar" 9991234 ". Todavía estoy jugando con la funcionalidad para que el soporte de caracteres opcional funcione ... –

0

No es muy inteligente almacenar números de teléfono en una base de datos con espacios, guiones, paréntesis, etc. La manera más eficiente es truncar toda esa basura en un simple número de 10 dígitos. De esta forma, puede almacenar el número en una columna basada en INTEGER en lugar de en un VARCHAR.

+0

No estoy haciendo la inserción, así que solo necesito sacar – Trace

+2

Esto también puede ser problemático cuando necesitas almacenar un 0 inicial para el intercambio. No es que él conduce a ese requisito anterior. – Matthew

+0

Utilice VARCHAR pero desinféctelo antes de la inserción (por ejemplo, deshágase de espacios/guiones/...) –

0
SELECT telephone_number 
    FROM table 
WHERE telephone_number REGEXP '[1]?[(]?[[:DIGIT:]]{3}[)]?[-]?[[:DIGIT:]]{3}[-]?[[:DIGIT:]]{4}' 
Cuestiones relacionadas