Cómo reemplazar una cadena en una columna de tabla de SQL Server

364

Tengo una tabla ( SQL Sever) que hace referencia a rutas ( UNCo de otro modo), pero ahora la ruta va a cambiar.

En la columna de ruta, tengo muchos registros y necesito cambiar solo una parte de la ruta, pero no toda la ruta. Y necesito cambiar la misma cadena a la nueva, en cada registro.

¿Cómo puedo hacer esto con un simple update?

Iralda Mitro
fuente

Respuestas:

604

Es así de fácil:

update my_table
set path = replace(path, 'oldstring', 'newstring')
cjk
fuente
43
Normalmente agregaría where path like '%oldstring%'si hubiera muchos datos.
Derek Tomes el
1
donde la condición tiene sentido porque si tengo 50 filas en la tabla y si estoy reemplazando 10 filas con la función de reemplazo, afecta a las 50 filas, a pesar de que reemplaza 10 filas si no tiene la condición where. Pero si tiene la condición donde se menciona en el comentario anterior, solo afecta a 10 filas.
iMalek
132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
Marc Gravell
fuente
1
lo siento, no ser quisquilloso después de diez años, pero no está claro en la respuesta si fooestá siendo reemplazado o bar (lo siento otra vez)
Alex
28

Intenté lo anterior pero no arrojó el resultado correcto. El siguiente lo hace:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
César
fuente
11
Esto anula totalmente el propósito de usar el método de reemplazo. Puede lograr lo mismo de esta manera: actualizar tabla set path = 'newstring' where path = 'oldstring';
Ian
11
quizás quisiste decir 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%'

Sin la CASTfunción recibí un error

El tipo de datos del argumento ntextno es válido para el argumento 1 de la replacefunción.

Igor Bakay
fuente
9

Puedes usar esta consulta

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

todas las respuestas son geniales pero solo quiero darte un buen ejemplo

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

esta declaración SQL reemplazará la existencia de la palabra "tabla" (segundo parámetro) dentro de la declaración dada (primer parámetro) con el tercer parámetro

el valor inicial es this value from tablepero después de ejecutar la función de reemplazo seráthis value from table but updated

y aquí hay un ejemplo real

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

por ejemplo si tenemos este valor

10.7440/perifrasis.2010.1.issue-1

Se convertirá

10.25025/perifrasis.2010.1.issue-1

espero que esto te de una mejor visualización

Basheer AL-MOMANI
fuente
6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

donde "ImagePath" es el nombre de mi columna.
"NewImagePath" es la columna temporery. El nombre inscrito en "ImagePath"
"~ /" es mi cadena actual. (Cadena vieja)
"../" es mi cadena requerida. (Cadena nueva)
"tblMyTable" es mi tabla en la base de datos.

Durgesh Pandey
fuente
4

Si el tipo de columna de destino no es varchar / nvarchar como texto , debemos convertir el valor de la columna como una cadena y luego convertirlo como:

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

necesita reemplazar la ruta con la ayuda de la función de reemplazo.

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

aquí column_name refiere a esa columna que desea cambiar.

Espero que funcione.


fuente
0

También puede reemplazar texto grande por plantilla de correo electrónico en tiempo de ejecución, aquí hay un ejemplo simple para eso.

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
Shekhar Patel
fuente