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

eliminación de caracteres especiales de expresiones regulares

select '11dd$%[email protected]' as input, regexp_replace('11dd$%[email protected]', '[^[:alnum:]]') as output
from   dual
;

INPUT         OUTPUT 
------------  --------
11dd$%[email protected]  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$%[email protected]' as input, regexp_replace('11dd$%[email protected]', '[[:alnum:]]') as output
from   dual
;

INPUT         OUTPUT
------------  ------
11dd$%[email protected]  $%[email protected]