2011-05-10 14 views
411

tengo una columna que contiene las direcciones URL (id, url):cadena de MySQL reemplazar

http://www.example.com/articles/updates/43 
http://www.example.com/articles/updates/866 
http://www.example.com/articles/updates/323 
http://www.example.com/articles/updates/seo-url 
http://www.example.com/articles/updates/4?something=test 

Me gustaría cambiar la palabra "actualización" a "noticias". ¿Es posible hacer esto con un script?

+1

duplicado posible de [MySQL - Camino para actualizar parte de una cadena?] (http://stackoverflow.com/questions/1876762/mysql-way-to-update-portion-of-a-string) –

Respuesta

983
UPDATE your_table 
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/') 
WHERE your_field LIKE '%articles/updates/%' 

Ahora filas que fueron como

http://www.example.com/articles/updates/43

será

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/

+18

Pregunta rápida, ¿es realmente necesario tener la cláusula "DÓNDE"? –

+42

@JohnCrawford De acuerdo con el artículo en el enlace: "No necesariamente tiene que agregar la cláusula 'WHERE LIKE' al final, porque si el texto para encontrar no está allí, la fila no se actualizará, ** pero debería acelerar las cosas **. " – Giraldi

+3

WHERE cláusula le da control específico sobre lo que se reemplaza. Sin uno, se verificará cada fila y posiblemente se reemplazarán los datos si se encuentra una coincidencia. – Carlton

12

La función replace debería funcionar para usted.

REPLACE(str,from_str,to_str) 

Devuelve la cadena str con todas las ocurrencias de la cadena from_str reemplazada por la cadena to_str. REPLACE() realiza una coincidencia de mayúsculas y minúsculas al buscar from_str.

126

Sí, MySQL tiene una función replace():

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

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

Tenga en cuenta que es más fácil si usted hace que un alias cuando se utiliza SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url.... 
+0

Siempre que las 'actualizaciones' de OP solo aparezcan una vez en la cuerda, entonces esto funcionaría.De lo contrario, estás atascado con la manipulación directa de cadenas, lo que es un verdadero dolor en MySQL. En ese punto, sería más fácil escribir una secuencia de comandos única para seleccionar los campos, la manipulación en el cliente y luego escribir de nuevo. –

6

Además de gmaggio a responder si necesita dinámicamente REPLACE y UPDATE acuerdo con otra columna que puede hacer por ejemplo:

UPDATE your_table t1 
INNER JOIN other_table t2 
ON t1.field_id = t2.field_id 
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE... 

En mi ejemplo, la cadena articles/news/ se almacena en other_table t2 y no es necesario utilizar LIKE en la cláusula WHERE.

1

Usted puede simplemente utilizar replace() función,

con el lugar donde Cláusula

update tabelName set columnName=REPLACE(columnName,'from','to') where condition; 

sin donde Cláusula

update tabelName set columnName=REPLACE(columnName,'from','to'); 

Nota: La consulta anterior, si para actualizar los registros directamente en la mesa, si quieres en consulta de selección y los datos no deben ser afectados en la tabla a continuación, puede utilizar el siguiente query-

select REPLACE(columnName,'from','to') as updateRecord;