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:] è un'abbreviazione per tutte le lettere (lettere ASCII standard, minuscole e maiuscole) e tutte le cifre. [^ ... ] significa tutto TRANNE ... . Quindi, questo sostituirà tutto TRANNE lettere e cifre con... niente (dal momento che non abbiamo fornito un terzo argomento a REGEXP_REPLACE).
MODIFICA :L'OP ha aggiunto una seconda parte alla domanda.
Se il compito è rimuovere SOLO tutti i caratteri alfanumerici e conservare tutto il resto, è sufficiente rimuovere il ^ dall'espressione regolare.
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