Come sostituire una stringa in una colonna della tabella di SQL Server


364

Ho una tabella ( SQL Sever) che fa riferimento a percorsi ( UNCo altro), ma ora il percorso cambierà.

Nella colonna del percorso, ho molti record e ho bisogno di cambiare solo una parte del percorso, ma non l'intero percorso. E ho bisogno di cambiare la stessa stringa con quella nuova, in ogni record.

Come posso farlo con un semplice update?

Risposte:


604

È così facile:

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

43
In genere aggiungerei where path like '%oldstring%'se c'erano molti dati.
Derek Tomes,

1
dove la condizione ha senso perché se ho 50 righe nella tabella e se sto sostituendo 10 righe con la funzione di sostituzione, influisce su tutte le 50 righe, anche se sostituisce 10 righe se non si dispone di dove condizione. Ma se hai una condizione come quella menzionata nel commento sopra, interessa solo 10 righe.
iMalek,

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

1
scusate, non essere pignoli dopo dieci anni, ma non è chiaro dalla risposta se fooviene sostituito o bar (scusate ancora)
Alex

28

Ho provato quanto sopra ma non ha prodotto il risultato corretto. Quello seguente fa:

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

11
Ciò vanifica totalmente lo scopo di utilizzare il metodo di sostituzione. Puoi ottenere la stessa cosa in questo modo: update table set path = 'newstring' dove path = 'oldstring';
Ian

11
forse intendevi 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%'

Senza la CASTfunzione ho ricevuto un errore

Il tipo di dati dell'argomento ntextnon è valido per l'argomento 1 della replacefunzione.


9

È possibile utilizzare questa query

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

8

tutte le risposte sono fantastiche, ma voglio solo darti un buon esempio

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

questa istruzione SQL sostituirà l'esistenza della parola "tabella" (secondo parametro) all'interno dell'istruzione data (primo parametro) con il terzo parametro

il valore iniziale è this value from tablema dopo aver eseguito la funzione di sostituzione lo saràthis value from table but updated

e qui è un vero esempio

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

per esempio se abbiamo questo valore

10.7440/perifrasis.2010.1.issue-1

diventerà

10.25025/perifrasis.2010.1.issue-1

spero che questo ti dia una migliore visualizzazione


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

dove "ImagePath" è il mio nome di colonna.
"NewImagePath" è la colonna temporanea Il nome insted di "ImagePath"
"~ /" è la mia stringa corrente. (Vecchia stringa)
"../" è la mia stringa requried. (Nuova stringa)
"tblMyTable" è la mia tabella nel database.


4

Se il tipo di colonna di destinazione è diverso da varchar / nvarchar come il testo , è necessario eseguire il cast del valore della colonna come stringa e convertirlo come:

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

2

è necessario sostituire il percorso con l'aiuto della funzione di sostituzione.

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

qui si column_nameriferisce a quella colonna che si desidera modificare.

Spero che funzioni.


0

Puoi anche sostituire testo di grandi dimensioni per il modello di posta elettronica in fase di esecuzione, ecco un semplice esempio per questo.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.