Muchas veces nos encontramos con la necesidad de cambiar algún valor recurrente en una base de datos MySQL. Puede ser, por ejemplo, una URL absoluta que hemos modificado, o la extensión de una imagen que está escrita a fuego en un campo.
Para poder hacer el cambio de forma segura, una manera rápida y fácil es usar expresiones regulares. Os dejo a continuación un pequeño snippet que os puede ser útil si se os da el caso:
1 2 | UPDATE TABLE SET COLUMN = REPLACE(COLUMN, 'oldvalue', 'newvalue') WHERE COLUMN REGEXP 'oldvalue'; |
Donde:
- column es el nombre del campo en la tabla.
- oldvalue es aquello que deseamos modificar.
- newvalue es la nueva cadena que reemplaza la anterior
Obviamente, podemos utilizar variables para simplificar el código, pero dependiendo de nuestro cliente MySQL, puede llegar a complicarnos más la vida.
Ojo, que la función REPLACE no admite expresiones regulares.
De la documentación oficial (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace):
REPLACE(str,from_str,to_str)
Returns the string str with all occurrences of the string from_str replaced by the string to_str. REPLACE() performs a case-sensitive match when searching for from_str.
mysql> SELECT REPLACE(‘www.mysql.com’, ‘w’, ‘Ww’);
-> ‘WwWwWw.mysql.com’
This function is multi-byte safe.
Lo envié antes de tiempo 🙂
Quería dejar claro que MySQL no permite reemplazo de cadenas usando expresiones regulares. Aunque si que permite búsquedas por expresiones regulares, no es lo mismo 🙂
Saludos!