So ersetzen Sie eine Zeichenfolge in einer SQL Server-Tabellenspalte


364

Ich habe eine Tabelle ( SQL Sever), die auf Pfade verweist ( UNCoder auf andere Weise), aber jetzt wird sich der Pfad ändern.

In der Pfadspalte habe ich viele Datensätze und muss nur einen Teil des Pfads ändern, aber nicht den gesamten Pfad. Und ich muss in jedem Datensatz die gleiche Zeichenfolge in die neue ändern.

Wie kann ich das mit einem einfachen machen update?

Antworten:


604

So einfach ist das:

update my_table
set path = replace(path, 'oldstring', 'newstring')

43
Ich würde normalerweise hinzufügen, where path like '%oldstring%'wenn es viele Daten gäbe.
Derek Tomes

1
Wobei Bedingung sinnvoll ist, denn wenn ich 50 Zeilen in der Tabelle habe und 10 Zeilen durch die Ersetzungsfunktion ersetze, wirkt sich dies auf alle 50 Zeilen aus, obwohl sie 10 Zeilen ersetzt, wenn Sie keine Wo-Bedingung haben. Wenn Sie jedoch eine Bedingung haben, wie im obigen Kommentar erwähnt, betrifft dies nur 10 Zeilen.
iMalek

132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')

Entschuldigung, nach zehn Jahren nicht pingelig zu sein, aber aus der Antwort geht nicht hervor, ob foosie ersetzt wird oder bar (nochmals Entschuldigung)
Alex

28

Ich habe das oben genannte versucht, aber es ergab nicht das richtige Ergebnis. Der folgende tut:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'

11
Dies macht den Zweck der Ersetzungsmethode völlig zunichte. Sie können das Gleiche wie folgt erreichen: update table set path = 'newstring' wobei path = 'oldstring';
Ian

11
vielleicht meintest du where path like '%oldstring%'?
v010dya

17
UPDATE CustomReports_Ta
SET vchFilter = REPLACE(CAST(vchFilter AS nvarchar(max)), '\\Ingl-report\Templates', 'C:\Customer_Templates')
where CAST(vchFilter AS nvarchar(max)) LIKE '%\\Ingl-report\Templates%'

Ohne die CASTFunktion habe ich einen Fehler bekommen

Der Argumentdatentyp ntextist für Argument 1 der replaceFunktion ungültig .


9

Sie können diese Abfrage verwenden

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'

8

Alle Antworten sind großartig, aber ich möchte Ihnen nur ein gutes Beispiel geben

select replace('this value from table', 'table',  'table but updated')

Diese SQL-Anweisung ersetzt das Vorhandensein des Wortes "Tabelle" (zweiter Parameter) in der angegebenen Anweisung (erster Parameter) durch den dritten Parameter

Der Anfangswert ist this value from tableaber nach dem Ausführen der Ersetzungsfunktionthis value from table but updated

und hier ist ein echtes Beispiel

UPDATE publication
SET doi = replace(doi, '10.7440/perifrasis', '10.25025/perifrasis')
WHERE doi like '10.7440/perifrasis%'

Zum Beispiel, wenn wir diesen Wert haben

10.7440/perifrasis.2010.1.issue-1

es wird werden

10.25025/perifrasis.2010.1.issue-1

Ich hoffe, dies gibt Ihnen eine bessere Visualisierung


6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

Dabei ist "ImagePath" mein Spaltenname.
"NewImagePath" ist eine temporäre Spalte. Der Name von "ImagePath"
"~ /" ist meine aktuelle Zeichenfolge. (Alte Zeichenfolge)
"../" ist meine erforderliche Zeichenfolge. (Neue Zeichenfolge)
"tblMyTable" ist meine Tabelle in der Datenbank.


4

Wenn der Zielspaltentyp nicht varchar / nvarchar ist Text ist , müssen wir den Spaltenwert als Zeichenfolge umwandeln und dann konvertieren:

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'

2

Sie müssen den Pfad mithilfe der Ersetzungsfunktion ersetzen.

update table_name set column_name = replace(column_name, 'oldstring', 'newstring')

Hier column_name bezieht sich auf die Spalte, die Sie ändern möchten.

Hoffe es wird funktionieren.


0

Sie können zur Laufzeit auch großen Text für E-Mail-Vorlagen ersetzen. Hier ist ein einfaches Beispiel dafür.

DECLARE @xml NVARCHAR(MAX)
SET @xml = CAST((SELECT [column] AS 'td','',        
        ,[StartDate] AS 'td'
         FROM [table] 
         FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
select REPLACE((EmailTemplate), '[@xml]', @xml) as Newtemplate 
FROM [dbo].[template] where id = 1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.