2012-04-16 5 views
207

Tengo una tabla con las siguientes columnas en una base de datos MySQLactualización de un valor de columna, en sustitución de parte de una cadena

[id, url] 

Y las URL son como:

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

que desea actualizar todas las las URL a otro dominio

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

manteniendo el nombre del archivo tal como está.

¿Cuál es la consulta que debo ejecutar?

+0

Posible duplicado de [MySQL string replace] (http://stackoverflow.com/questions/5956993/mysql-string-replace) –

Respuesta

443
UPDATE urls 
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/') 
+0

Muy útil, trabajó en 2000 consultas sin errores, muy rápidamente. – Andy

+1

REEMPLAZAR también funciona en SELECT, bastante útil :) – Arda

113
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

+0

+1 para la referencia a la documentación ... –

+13

Hola, ¿por qué necesito el dónde? –

+12

@GuyCohen Porque de lo contrario, la consulta modificará cada fila de la tabla. La cláusula 'WHERE' optimiza la consulta para modificar solo las filas con cierta URL. Lógicamente, el resultado será el mismo, pero la adición de 'WHERE' hará que la operación sea más rápida. –

20

Trate de utilizar el REPLACE function:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); 
     -> 'WwWwWw.mysql.com' 

en cuenta que es sensible a mayúsculas.

+0

+ para señalar la sensibilidad de mayúsculas y minúsculas. – kubilay

+0

¿Cómo se hace CASE - INSENSITIVE? Estoy apilado por favor hlp. thx –

+1

@UniversalGrasp Vea muchas posibles respuestas aquí: http://stackoverflow.com/questions/5656056/case-insensitive-replace-in-mysql –

8

Usted necesita la cláusula DONDE para reemplazar SOLO los registros que cumple la condición en la cláusula WHERE (en contraposición a todos los registros). Utiliza el signo % para indicar una cadena parcial: I.E.

ME GUSTA ('... // domain1.com/images/%'); significa todos los registros que instrucciones BEGIN con "... // domain1.com/images/" y tienen nada después (que es el% de ...)

Otro ejemplo:

LIKE ('% http://domain1.com/images/% ') que significa todos los registros que contienen "http://domain1.com/images/" en cualquier parte de la cadena ...

Cuestiones relacionadas