MySQL busca y reemplaza algo de texto en un campo
Pregunta
¿Qué consulta MySQL realizará una búsqueda de texto y la reemplazará en un campo particular de una tabla?
Es decir.buscar foo
y reemplazar con bar
entonces un registro con un campo con el valor hello foo
se convierte hello bar
.
Solución
Cambiar table_name
y field
para que coincida con el nombre de su tabla y el campo en cuestión:
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
- REEMPLAZAR (funciones de cadena)
- INSTR (funciones de cadena)
Otros consejos
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
Y si quieres buscar y reemplazar según el valor de otro campo puedes hacer un CONCAT:
update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
Sólo tener este aquí para que otros lo encuentren de inmediato.
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Como por ejemplo, si quiero reemplazar todas las apariciones de John por Mark, las usaré a continuación,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
El Reemplazar La función de cadena hará eso.
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()
El camino es el segundo más rápido y omitiendo el WHERE
La cláusula en conjunto es la más lenta, incluso si la columna no está indexada.
Utilicé la línea de comando anterior de la siguiente manera:actualizar NOMBRE DE TABLA establecer CAMPO = reemplazar (CAMPO, 'Y', 'y');el propósito era reemplazar Y con y ("A" debería estar en minúscula).El problema es que no puede encontrar "Y" en la base de datos, pero si uso "%And%", puede encontrarlo junto con muchos otros "Y" que forman parte de una palabra o incluso los que ya están en minúsculas.