Ab und zu sieht man den Wald vor lauter Bäumen nicht. Dieses Mal stand ich vor der Aufgabe aus einer Spalte bestimmte Werte zu ersetzen. Die Liste der zu ersetzenden Werte war doch etwas länger. Mit einem simplen Replace komme ich nicht besonders weit, da sich ja nur ein Wert ersetzen lässt. Grübel grübel.. Doch es ist ganz simpel.
Das Prinzip:
Wir weisen einer Variablen einen per Replace bereinigten Wert zu. Anschliessend wird auf das Ergebnis wiederum ein weiterer Replace angewendet (mit einem anderen zu ersetzenden Wert) und dann wiederum der Variable zugewiesen. Das machen wir solange bis wir alle zu ersetzenden Werte durch haben. Das geht pfeilschnell.
Das ganze packen wir noch in eine Funktion und schon haben wir einen besseren Replace:
CREATE FUNCTION dbo.BetterReplace (@str NVARCHAR(4000))
RETURNS nVARCHAR(4000) AS
BEGIN
SET @str = REPLACE (@str,'>',' ')
SET @str = REPLACE (@str,';',' ')
SET @str = REPLACE (@str,'&',' ')
SET @str = REPLACE (@str,':',' ')
SET @str = REPLACE (@str,'<',' ')
SET @str = REPLACE (@str,'/',' ')
SET @str = REPLACE (@str,'\',' ')
SET @str = REPLACE (@str,',',' ')
SET @str = REPLACE (@str,'*',' ')
SET @str = REPLACE (@str,'^',' ')
SET @str = REPLACE (@str,'ü','ue')
SET @str = REPLACE (@str,'ä','ae')
SET @str = REPLACE (@str,'ö','oe')
SET @str = REPLACE (@str,'"',' ')
RETURN @str
END
Zum Beispiel:
declare @str as varchar(100)
set @str='<Tel>+49\8677-98890'
select dbo.BetterReplace (@str)
Ergebnis:
Tel +49 8677-98890
Einfach und wirkungsvoll!