Zeichenkette bereinigen / multiple replace() Operationen

ukulele

Datenbank-Guru
Beiträge
4.702
Ich möchte Zeichenketten von störenden Sonderzeichen etc. befreien die beim Vergleich von zwei Zeichenketten miteinander eher hinderlich sind. Biser läuft das unter anderem so:

Code:
    SET        @bezeichnung = replace(@bezeichnung,'','')
    SET        @bezeichnung = replace(@bezeichnung,'²','2')
    SET        @bezeichnung = replace(@bezeichnung,'³','3')
    SET        @bezeichnung = replace(@bezeichnung,'ß','ss')
    SET        @bezeichnung = replace(@bezeichnung,'@','at')
    SET        @bezeichnung = replace(@bezeichnung,'€','e')
    SET        @bezeichnung = replace(@bezeichnung,'ä','ae')
    SET        @bezeichnung = replace(@bezeichnung,'ö','oe')
    SET        @bezeichnung = replace(@bezeichnung,'ü','ue')
    SET        @bezeichnung = replace(@bezeichnung,'á','a')
    SET        @bezeichnung = replace(@bezeichnung,'é','e')
    SET        @bezeichnung = replace(@bezeichnung,'í','i')
    SET        @bezeichnung = replace(@bezeichnung,'ó','o')
    SET        @bezeichnung = replace(@bezeichnung,'ú','u')
    SET        @bezeichnung = replace(@bezeichnung,'à','a')
    SET        @bezeichnung = replace(@bezeichnung,'è','e')
    SET        @bezeichnung = replace(@bezeichnung,'ì','i')
    SET        @bezeichnung = replace(@bezeichnung,'ò','o')
    SET        @bezeichnung = replace(@bezeichnung,'ù','u')
    SET        @bezeichnung = replace(@bezeichnung,'â','a')
    SET        @bezeichnung = replace(@bezeichnung,'ê','e')
    SET        @bezeichnung = replace(@bezeichnung,'î','i')
    SET        @bezeichnung = replace(@bezeichnung,'ô','o')
    SET        @bezeichnung = replace(@bezeichnung,'û','u')
    SET        @bezeichnung = replace(@bezeichnung,'°',' ')
    SET        @bezeichnung = replace(@bezeichnung,'^',' ')
    SET        @bezeichnung = replace(@bezeichnung,'!',' ')
    SET        @bezeichnung = replace(@bezeichnung,'"',' ')
    SET        @bezeichnung = replace(@bezeichnung,'§',' ')
    SET        @bezeichnung = replace(@bezeichnung,'$',' ')
    SET        @bezeichnung = replace(@bezeichnung,'[%]',' ')
    SET        @bezeichnung = replace(@bezeichnung,'/',' ')
    SET        @bezeichnung = replace(@bezeichnung,'=',' ')
    SET        @bezeichnung = replace(@bezeichnung,'\',' ')
    SET        @bezeichnung = replace(@bezeichnung,'#',' ')
    SET        @bezeichnung = replace(@bezeichnung,'.',' ')
    SET        @bezeichnung = replace(@bezeichnung,'[_]',' ')
    SET        @bezeichnung = replace(@bezeichnung,'&',' ')
    SET        @bezeichnung = replace(@bezeichnung,'+',' ')
    SET        @bezeichnung = replace(@bezeichnung,'-',' ')
    SET        @bezeichnung = replace(@bezeichnung,'{','')
    SET        @bezeichnung = replace(@bezeichnung,'(','')
    SET        @bezeichnung = replace(@bezeichnung,'[','')
    SET        @bezeichnung = replace(@bezeichnung,']','')
    SET        @bezeichnung = replace(@bezeichnung,')','')
    SET        @bezeichnung = replace(@bezeichnung,'}','')
    SET        @bezeichnung = replace(@bezeichnung,'?','')
    SET        @bezeichnung = replace(@bezeichnung,'´','')
    SET        @bezeichnung = replace(@bezeichnung,'`','')
    SET        @bezeichnung = replace(@bezeichnung,'*','')
    SET        @bezeichnung = replace(@bezeichnung,'~','')
    SET        @bezeichnung = replace(@bezeichnung,'''','')
    SET        @bezeichnung = replace(@bezeichnung,'>','')
    SET        @bezeichnung = replace(@bezeichnung,'<','')
    SET        @bezeichnung = replace(@bezeichnung,'|','')
    SET        @bezeichnung = replace(@bezeichnung,';','')
    SET        @bezeichnung = replace(@bezeichnung,',','')
    SET        @bezeichnung = replace(@bezeichnung,':','')
    SET        @bezeichnung = replace(@bezeichnung,'·','')
...aber schön finde ich das nicht. Kennt da jemand etwas eleganteres und am besten auch performanteres?
 
Werbung:
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.846
Also es gibt jede Menge reguläre Ausdrücke:
http://technet.microsoft.com/de-de/library/ms174214.aspx
Aber wenn ich z.B. | als Oder-Funktion versuche anzuwenden:
Code:
SET        @bezeichnung = replace(@bezeichnung,'(|)','')
Tut sich da nichts, ein () wird durchgeschleift. Auch würde es mir nur bei den unteren Fällen helfen.

Naja, ich meine halt sowas wie:

Code:
test=*# select regexp_replace('bla() & fasel !|@','[^a-zA-Z0-9 ]','','g');
 regexp_replace
----------------
 bla  fasel
(1 row)
 
Oben