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:] er stenografi for alle bogstaver (standard ASCII-bogstaver, små og store bogstaver) og alle cifre. [^ ... ] betyder alt UNDTAGET ... . Så dette vil erstatte alt UNDTAGET bogstaver og cifre med... ingenting (da vi ikke gav et tredje argument til REGEXP_REPLACE).
REDIGER :OP tilføjede en anden del til spørgsmålet.
Hvis opgaven KUN er at fjerne alle de alfanumeriske tegn og beholde alt andet, skal du blot fjerne ^ fra det regulære udtryk.
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