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?

Respuestas:


604

Es así de fácil:

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

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/')

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'

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.


9

Puedes usar esta consulta

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

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


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.


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'

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.