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:] is een afkorting voor alle letters (standaard ASCII-letters, kleine letters en hoofdletters) en alle cijfers. [^ ... ] betekent alles BEHALVE ... . Dit vervangt dus alles BEHALVE letters en cijfers door... niets (aangezien we geen derde argument aan REGEXP_REPLACE hebben gegeven).
BEWERKEN :De OP heeft een tweede deel aan de vraag toegevoegd.
Als de opdracht is om ALLEEN alle alfanumerieke tekens te verwijderen en al het andere te behouden, verwijder dan gewoon de ^ van de reguliere expressie.
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