Suchen und Ersetzen in MSSQL
Will man in einer SQL-Tabelle Werte ersetzen, so ist dieses ja eigentlich sehr einfach und lässt sich, sofern nur der Wert selber im entsprechenden Feld steht, über eine simple UPDATE-Query erledigen.
Etwas komplexer wird die ganze Angelegenheit, wenn man, z.B. weil sich z.B. ein Produktname aber nicht die Bezeichnung geändert hat, nur ein Wort in einem Feld austauschen muss.
Lösen lässt sich das über eine kleine SQL Abfrage:
DECLARE @ersetzen varchar (255)
DECLARE @findus varchar (255)
SELECT @suchen = ‘Altername’
SELECT @ersetzen = ‘Neuername’
SELECT @findus = ‘%’ + @suchen + ‘%’
UPDATE
[Tabellenname]
SET
[Feldname] = STUFF([Feldname], PATINDEX(@findus, [Feldname]), DATALENGTH(@suchen), @ersetzen)
WHERE
[Feldname] LIKE @findus
Das Beispiel durchsucht nun eine nvarchar-Spalte Feldname in der Tabelle Tabellenname und ersetzt dort das Wort Altername durch das Wort Neuername.
Danke für die Idee ! Ich habe es zum Tausch von URLs benutzt.
Ein paar kleine Änderungen waren auf meinem MS-SQL-2005 Server jedoch nötig. So hat es nun bei mir funktioniert:
USE meinedatenbank
GO
DECLARE @suchen varchar(255);
DECLARE @ersetzen varchar(255);
DECLARE @findus varchar(255);
SET @suchen = ‘https://www.xyz.com/';
SET @ersetzen = ‘http://www.abc.de/';
SET @findus = ‘%’ + @suchen + ‘%’;
UPDATE dbo.meinetabelle
SET meinfeld = STUFF(meinfeld , PATINDEX(@findus, meinfeld),
DATALENGTH(@suchen), @ersetzen)
WHERE
meinfeld LIKE @findus
Leider funktioniert es nicht beim Felddaten-Typ: text
Das Feld muss umgewandelt werden zu einem var(Max)-Feld.