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+''