2009-05-02 18 views
300

Tengo una tabla (SQL Sever) que hace referencia a rutas (UNC o de otro tipo), 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 reemplazar una cadena en un SQL Server Tabla Columna

¿Cómo puedo hacer esto con una simple actualización?

Respuesta

483

Es así de fácil:

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

Normalmente agregaría 'where path like '% oldstring%'' si hubiera una gran cantidad de datos. –

+0

donde la condición tiene sentido porque si tengo 50 filas en la tabla y si estoy reemplazando 10 filas con la función reemplazar, afecta a las 50 filas, aunque reemplaza 10 filas si no tienes la condición. Pero si tiene una condición como la mencionada en el comentario anterior, solo afecta a 10 filas. –

108
UPDATE [table] 
SET [column] = REPLACE([column], '/foo/', '/bar/') 
+8

¡Encanto! ¡Funciona como una vieja bicicleta rustik con un millón de galones de gasolina y una carretera abierta! – Skynet

24

probé la anterior pero que no dieron los resultados correctos. El siguiente hace:

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

Esto es totalmente contrario al propósito de usar el método de reemplazo. Puede lograr lo mismo así: update table set path = 'newstring' donde path = 'oldstring'; – Ian

+8

quizás quisiste decir 'where path like '% oldstring%''? – v010dya

15
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 función CAST me dio un error

Argumento tipo de datos ntext no es válido para el argumento 1 de replace función.

3

Si el tipo de columna de destino es distinto varchar/nvarchar como texto, tenemos que emitir 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' 
3
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

donde "ImagePath" es mi columna Nombre.
"NewImagePath" es temporery Nombre columna insted de "ImagePath"
"~ /" es mi cadena actual. (Antiguo cadena)
"../" es mi cadena requried. (Nueva cadena)
"tblMyTable" se mi mesa en la base de datos.

0

También puede reemplazar el texto grande para la 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 
4

Puede utilizar esta consulta

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

todas las respuestas son grandes, pero sólo quiero darle un buen ejemplo

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

este SQL sustituirá a la existencia de la palabra "tabla" (segundo parámetro) dentro de la instrucción dada (primer parámetro) con el tercer parámetro

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

y aquí es 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 le brinde una mejor visualización

Cuestiones relacionadas