it-swarm.com.de

So ersetzen Sie eine Zeichenfolge in einer SQL Server-Tabellenspalte

Ich habe eine Tabelle (SQL Sever), die auf Pfade verweist (UNC oder anders), aber jetzt wird sich der Pfad ändern.

In der Pfadspalte befinden sich viele Datensätze, und ich muss nur einen Teil des Pfads ändern, jedoch nicht den gesamten Pfad. Und ich muss in jeder Aufnahme die gleiche Zeichenfolge durch die neue ersetzen.

Wie kann ich das mit einem einfachen update machen?

352
Iralda Mitro

So einfach geht's:

update my_table
set path = replace(path, 'oldstring', 'newstring')
581
cjk
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
128
Marc Gravell

Ich habe das oben Genannte ausprobiert, aber es ergab nicht das richtige Ergebnis. Der folgende macht:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
25
Caesar
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 Funktion CAST ist ein Fehler aufgetreten

Der Argumentdatentyp ntext ist für Argument 1 der Funktion replace ungültig.

17
Igor Bakay

Sie können diese Abfrage verwenden

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

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 der Word- "Tabelle" (zweiter Parameter) in der angegebenen Anweisung (erster Parameter) durch den dritten Parameter

der anfängliche Wert ist this value from table, aber nach dem Ausführen der Ersetzungsfunktion ist es this 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

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

wobei "ImagePath" mein Spaltenname ist.
"NewImagePath" ist der temporäre Spaltenname von "ImagePath"
"~ /" ist meine aktuelle Zeichenfolge. (alte Zeichenfolge)
"../" ist meine benötigte Zeichenfolge. (Neue Zeichenfolge)
"tblMyTable" ist meine Tabelle in der Datenbank.

6
Durgesh Pandey

Wenn der Zielspaltentyp nicht varchar/nvarchar ist, wie z. B. text, müssen Sie den Spaltenwert als Zeichenfolge umwandeln und dann wie folgt konvertieren:

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

sie müssen den Pfad mit Hilfe der Ersetzungsfunktion ersetzen.

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

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

Hoffe es wird funktionieren.

2
user11441779

Sie können auch großen Text für die E-Mail-Vorlage zur Laufzeit 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
0
Shekhar Patel