Tengo un campo en mi base de datos donde los usuarios tienen guardados de forma libre los números de teléfono. Como resultado, los datos que tiene todo tipo de formatos diferentes:

  • (área) nnn-nnnn
  • área-nnn-nnnn
  • área.nnn.nnnn
  • etc

Me gustaría quitar todos los caracteres no numéricos y sólo almacenar los dígitos, pero no puedo encontrar una manera simple de hacer esto. Es posible sin el uso de REEMPLAZAR uno por cada char?

InformationsquelleAutor chris | 2010-10-19

2 Comentarios

  1. 57

    Puede utilizar REGEXP_REPLACE desde Oracle 10:

    SELECT REGEXP_REPLACE('+34 (947) 123 456 ext. 2013', '[^0-9]+', '')
    FROM DUAL
    

    Este ejemplo devuelve 349471234562013.

    Alternativa sintaxis incluyen:

    • POSIX clases de personajes:

      '[^[:digit:]]+'
      
    • Perl de influencia de las extensiones (desde Oracle 11):

      '\D+'
      
    • Esta respuesta me salvó el día. Aunque a través de un poco de búsqueda en google me enteré de que usted puede reemplazar '[^0-9]+' con '[^[:digit:]]+'. 🙂
    • Eso es un POSIX carácter de clase. Si recuerdo correctamente, no se admiten en versiones anteriores, pero debería funcionar bien con las últimas versiones.
    • Gracias por el aviso, Álvaro. La saqué de aquí: orafaq.com/node/2404, probado en mi database 11g, y publicado mi comentario anterior. Supongo que durante el proceso algo me olvidó aviso de que esta versión es compatible. 🙂
    • Haga caso omiso de la parte acerca de la versión de Oracle. Yo estaba confundido con PERL de influencia Extensiones como \d. POSIX sintaxis estaba disponible desde el principio (es decir, 10g).
  2. 12

    Para versiones anteriores de Oracle que no admiten expresiones regulares:

    select translate (phone_no,'0'||translate (phone_no,'x0123456789','x'),'0')
    from mytable;
    

    El interior translate obtiene todos los no-dígito de caracteres desde el número de teléfono, y el exterior translate, a continuación, quita el número de teléfono.

    • realmente coll manera! Supongo sombrero regexp tomar más energía de la CPU en lugar de traducir

Dejar respuesta

Please enter your comment!
Please enter your name here