Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

eliminação de caracteres especiais de expressão regular

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]