Oracle SQL: ungewollte Zeichen aus einem String entfernen

„All input is evil“ ist eine alte Weisheit. In der Praxis liefern Datenquellen die verschiedensten Überraschungen. Leerzeichen/Whitespaces am Anfang oder am Ende ist dabei noch am einfachsten zu finden. Wie aber nun ungewollte Zeichen aus einem String filtern ?

Die Funktionen Replace oder Translate bieten sich an, scheitern aber daran, dass eine Negativliste (also alle Zeichen die man entfernen möchte) erwarten – ziemlich unpraktisch bei UTF8. Ein regulärer Ausdruck könnte auch helfen, ist aber (auch mit Hinblick auf die Performance) mit Kanonen auf Spatzen geschossen.

Die Kombination aus zwei Translate Befehlen arbeitet mit einer Positivliste. Man gibt also eine Liste erlaubter Zeichen an.

Im folgenden Beispiel soll aus einer Strassenangabe nur der Hausnummernanteil gefiltert werden. Die Positivliste sind hier die Zahlen von 0-9.

 
 with input as 
 (
 select 'Hauptstrasse 35a' hausnummer from dual
 )
 select translate(hausnummer,'x'||translate(hausnummer,'0123456789','X'),'x') from input
 --ergibt : 35
 

Hier der Link zu einer Demo.

Dieser Beitrag wurde unter Oracle veröffentlicht. Setze ein Lesezeichen auf den Permalink.