MySQL busca y reemplaza texto en un campo

257

¿Qué consulta MySQL hará una búsqueda de texto y la reemplazará en un campo en particular en una tabla?

Es decir, buscar fooy reemplazar por barlo que se hello fooconvierte en un registro con un campo con el valor hello bar.

julz
fuente

Respuestas:

490

Cambie table_namey fieldcoincida con el nombre de la tabla y el campo en cuestión:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
Joe Skora
fuente
79
ACTUALIZAR [nombre_tabla] SET [nombre_campo] = REEMPLAZAR ( [field_name], "foo", "bar");
Meetai.com
66
Creo que es más rápido no usar WHERE instr(field, 'foo') > 0;(por lo que no realizaría 2 búsquedas) ... ¿Me equivoco?
inemanja
2
@treddell, ninguna posición comienza en 1 en cadenas SQL.
Alexis Wilke
2
@inemanja, @Air sin la WHEREcláusula que haces UPDATEen todas las filas ...
Alexis Wilke
77
Al igual que Pring, si vas a dejar un comentario como ese, quizás quieras explicar por qué. ¿Fue un error en el consejo original o un error de tu parte? ¿Y sabe que antes de realizar cambios radicales en una base de datos, se supone que debe hacer una copia de seguridad primero?
pdwalker
86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
thesmallprint
fuente
2
Me ayudó. Para todos los novatos, quite los corchetes.
Anantha Raju C
8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Por ejemplo, si quiero reemplazar todas las apariciones de John por Mark, usaré a continuación,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
Umesh Patil
fuente
6

Y si desea buscar y reemplazar en función del valor de otro campo, puede hacer un CONCAT:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

Solo para tener este aquí para que otros lo encuentren a la vez.

basdog22
fuente
Si cita el nombre del campo, ¡ asegúrese de usar el tipo correcto de citas !
200_success
4

En mi experiencia, el método más rápido es

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

El INSTR()camino es el segundo más rápido y omitir la WHEREcláusula es más lento, incluso si la columna no está indexada.

Gaspy
fuente
Funciona para mí porque necesito agregar otra cláusula donde. ACTUALIZAR nombre_tabla SET field = REPLACE (field, 'foo', 'bar') WHERE field LIKE '% foo%' AND otherfield = 'foo22'
Max
1

La función Reemplazar cadena hará eso.

Wayne
fuente
Funciona para mi. Depende de cómo interpretes la pregunta. Si necesita cambiar las entradas de la base de datos, use update. De lo contrario, esta solución es mucho mejor, ya que se puede utilizar sin actualizar los campos.
Gruber
0

Utilicé la línea de comando anterior de la siguiente manera: update TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); el propósito era reemplazar Y con y ("A" debería estar en minúsculas). El problema es que no puede encontrar el "Y" en la base de datos, pero si uso como "% Y%", puede encontrarlo junto con muchos otros ands que son parte de una palabra o incluso los que ya están en minúscula.

Schwann
fuente