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:
[code lang=“sql“]
DECLARE @suchen varchar (255)
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
[/code]

Das Beispiel durchsucht nun eine nvarchar-Spalte Feldname in der Tabelle Tabellenname und ersetzt dort das Wort Altername durch das Wort Neuername.

One thought on “%1$s”

  1. 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.

Comments are closed.