MySQL: sustituir cadena con expresiones regulares

17 Dic 2010

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.

Más:

{2} Comentarios.

  1. aanton

    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.

  2. aanton

    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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *