Buscar y reemplazar cadenas de texto totales o parciales en MySQL
7/02/2012Creo que este pequeño tutorial será muy útil para muchos de ustedes, ya que a veces necesitamos buscar y reemplazar una cadena existente en algún campo de MySQL, por ejemplo “Busca ‘Zilus’ y lo que encuentres modificado por ‘TheZilus’.
Otro ejemplo practico, seria buscar y reemplazar fragmentos, digamos, si tenemos un campo de contenido separado por comas, como “tags”, categorías etc. Ejemplo practico: “Busca dentro de categorías ’1′ y reemplaza por ’2′.
Existen múltiples combinaciones a estas posibilidades, así que cada quien ponga el sazón que se necesite, aquí solo les muestro los tips!
Para buscar en un campo separado por comas:
SELECT * FROM tabla WHERE FIND_IN_SET(’196′, `campo`);
Para que se cumplan dos reglas (pueden ser 2 o mas categorías etc):
SELECT * FROM tabla WHERE FIND_IN_SET(’196′, `campo`) AND FIND_IN_SET(’100′, `campo`);
Ahora reemplazaremos el numero 196 de el campo “campo”, que contiene ’200,201,196,14′. Con esto el nuevo contenido de campo será ’200,201,14′.
UPDATE tabla SET campo = campo &~ FIND_IN_SET(’196,’, campo);
Otra forma de hacer lo mismo, pero con menos elegancia:
UPDATE tabla SET campo = REPLACE(campo, ’196,’,”);
Ahora, algo similar pero realmente “reemplazando” un valor con otro, en este ejemplo, se cambia el 196, por 17.
UPDATE tabla SET campo = REPLACE(campo, ’196,’,’17,’);
Como ejemplo final, recordemos que a estas consultas, se pueden agregar “condiciones”, en este ejemplo, reemplazaremos solamente en las filas que contengan 17 y 16, como ejemplo ’201,196,17,58,34,16,172′:
UPDATE tabla SET campo = REPLACE(campo, ’196,’,”) WHERE FIND_IN_SET(’17′, `campo`) AND FIND_IN_SET(’16′, `campo`);