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]