Actualizar un valor de columna, reemplazando parte de una cadena

326

Tengo una tabla con las siguientes columnas en una base de datos MySQL

[id, url]

Y las URL son como:

 http://domain1.com/images/img1.jpg

Quiero actualizar todas las URL a otro dominio.

 http://domain2.com/otherfolder/img1.jpg

manteniendo el nombre del archivo como está.

¿Cuál es la consulta que debo ejecutar?

Addev
fuente
Posible duplicado de reemplazo de cadena MySQL
Steve Chambers

Respuestas:

683
UPDATE urls
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/')
Dmytro Shevchenko
fuente
162
UPDATE yourtable
SET url = REPLACE(url, 'http://domain1.com/images/', 'http://domain2.com/otherfolder/')
WHERE url LIKE ('http://domain1.com/images/%');

documentos relevantes: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

Marc B
fuente
13
Hola, ¿por qué necesito el dónde?
Guy Cohen
14
@GuyCohen Porque, de lo contrario, la consulta modificará cada fila de la tabla. La WHEREcláusula optimiza la consulta para modificar solo las filas con cierta URL. Lógicamente, el resultado será el mismo, pero la adición de WHEREhará que la operación sea más rápida.
Dmytro Shevchenko
3
Las WHEREasegura también que sólo se está reemplazando partes de cadenas que comienzan con http://etc/etc/o string_to_be_replaced.Por ejemplo, en la respuesta dada, http://domain1.com/images/this/is/a/testse verían afectados, pero foobar/http://domain1.com/images/no lo haría.
Kyle Challis
9

Necesita la cláusula WHERE para reemplazar SOLO los registros que cumplan con la condición de la cláusula WHERE (en oposición a todos los registros). Utiliza el signo % para indicar una cadena parcial: IE

LIKE ('...//domain1.com/images/%');

medios todos los registros que instrucciones BEGIN con "...//domain1.com/images/"y tener después de nada (que es la %de ...)

Otro ejemplo:

LIKE ('%http://domain1.com/images/%')

lo que significa todos los registros que contiene "http://domain1.com/images/"

en cualquier parte de la cadena ...

Kenneth Daly
fuente
7

Prueba esto...

update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');
ManiMaran A
fuente
1

Primero, hay que verificar

SELECCIONE * DESDE universityDONDE course_name LIKE '% & amp%'

A continuación, tengo que actualizar

ACTUALIZAR universidad SET course_name = REPLACE (course_name, '& amp', '&') WHERE id = 1

Resultados: Ingeniería y Tecnología de amplificadores => Ingeniería y Tecnología

TechyFlick
fuente