separar regexp_replace ocurrencias funciones especiales ejemplos contar caracteres caracter cadena buscar oracle11g replace

oracle11g - regexp_replace - replace oracle ejemplos



Oracle: Reemplazar caracteres no numéricos en una cadena (2)

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

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

Me gustaría quitar todos los caracteres no numéricos y simplemente almacenar los dígitos, pero no puedo encontrar una forma sencilla de hacerlo. ¿Es posible sin usar un REEMPLAZO para cada char?


Para versiones anteriores de Oracle que no admiten expresiones regulares:

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

El translate interno obtiene todos los caracteres que no sean dígitos del número de teléfono, y el translate externo los quita del número de teléfono.


Puede usar REGEXP_REPLACE desde Oracle 10:

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

Este ejemplo devuelve 349471234562013 .

Las sintaxis alternativas incluyen:

  • Clases de caracteres POSIX:

    ''[^[:digit:]]+''

  • Extensiones influenciadas por Perl (desde Oracle 11):

    ''/D+''