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.

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;

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');

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');

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.


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.