Zeichen in Microsoft SQL Server ersetzen

Der Dotnet-Doktor  –  4 Kommentare

Während man für mehrere Zeichenersetzungen bisher mehrere verschachtelte Aufrufe der Replace()-Funktion brauchte, geht es seit Microsoft SQL Server 2017 effizienter mit der neuen Translate()-Funktion.

Seit vielen Jahren bin ich Entwickler bei einem CRM-System. Die Bereinigung von Datensätzen gehört zum Alltag, gerade wenn die Datensätze von verschiedenen Menschen, zum Teil den Kunden selbst erfasst werden.

So möchte man einen Firmeneintrag wie

heise online [Heise Gruppe GmbH + Co. KG}

gerne bereinigen, indem man runde statt eckigen oder geschweiften Klammern und das kaufmännische Und statt des Pluszeichens verwendet.

in Microsoft SQL Server bis einschließlich Version 2016 braucht man dazu leider mehrere verschachtelte Aufrufe der Replace()-Funktion:

select  replace( replace( replace( replace(replace(kundenname
,'[', '(')
,']', ')')
,'{', '(')
,'}', ')')
,'+', '&')
from kunde where ID = 234

Seit Microsoft SQL Server 2017 (v14.1709, erschienen am 2. Oktober 2017) geht es effizienter mit der neuen Translate()-Funktion. Sie ersetzt in der Zeichenkette im ersten Parameter alle Vorkommnisse der im zweiten Parameter genannten Zeichen durch das Zeichen an der gleichen Position in der dritten Zeichenkette:

select translate(kundenname,'[]{}+','()()&') from kunde where ID = 234

Der Befehl ersetzt eckige und geschweifte Klammern durch runde sowie das Pluszeichen durch ein kaufmännisches Und.