sql >> Base de Datos >  >> RDS >> Oracle

eliminación de caracteres especiales de expresiones regulares

select '11dd$%example@sqldat.com' as input, regexp_replace('11dd$%example@sqldat.com', '[^[:alnum:]]') as output
from   dual
;

INPUT         OUTPUT 
------------  --------
11dd$%example@sqldat.com  11dde11h

[:alnum:] es una forma abreviada de todas las letras (letras ASCII estándar, mayúsculas y minúsculas) y todos los dígitos. [^ ... ] significa todo EXCEPTO ... . Entonces, esto reemplazará todo EXCEPTO letras y dígitos con... nada (ya que no le dimos un tercer argumento a REGEXP_REPLACE).

EDITAR :El OP agregó una segunda parte a la pregunta.

Si la tarea es eliminar SOLAMENTE todos los caracteres alfanuméricos y conservar todo lo demás, simplemente elimine el ^ de la expresión regular.

select '11dd$%example@sqldat.com' as input, regexp_replace('11dd$%example@sqldat.com', '[[:alnum:]]') as output
from   dual
;

INPUT         OUTPUT
------------  ------
11dd$%example@sqldat.com  $%example@sqldat.com