select '11dd$%[email protected]' as input, regexp_replace('11dd$%[email protected]', '[^[:alnum:]]') as output
from dual
;
INPUT OUTPUT
------------ --------
11dd$%[email protected] 11dde11h
[:alnum:]
é uma abreviação para todas as letras (letras ASCII padrão, minúsculas e maiúsculas) e todos os dígitos. [^ ... ]
significa tudo, EXCETO ...
. Então, isso substituirá tudo, EXCETO letras e dígitos por... nada (já que não demos um terceiro argumento para REGEXP_REPLACE). EDITAR :O OP adicionou uma segunda parte à pergunta.
Se a atribuição for remover APENAS todos os caracteres alfanuméricos e manter todo o resto, basta remover o
^
da expressão regular. select '11dd$%[email protected]' as input, regexp_replace('11dd$%[email protected]', '[[:alnum:]]') as output
from dual
;
INPUT OUTPUT
------------ ------
11dd$%[email protected] $%[email protected]