Reemplazar cadenas en MySQL

A menudo es necesario realizar sustituciones de cadenas en información almacenada en base de datos de forma masiva. Por ejemplo hoy he necesitado realizar un cambio en todos los enlaces que se referencian en la base de datos de este web, gestionada con WordPress, para que a aquellos que tuvieran target="_blank" se les añadiera un class="external". Esto antes lo hacía con un plugin de forma automática, pero lo hacía para todos los target blanks, y en estos momentos me interesa que sea únicamente para los que correspondan a webs externos, de forma que únicamente en estos casos salga el iconito de la flecha a su derecha.

Para hacer este cambio lo más sencillo es realizar una consulta SQL que sustitula la cadena target="_blank" por class="external" en todos los contenidos. Esto es tan sencillo como realizar la siguiente query:

UPDATE wp_posts 
SET post_content = REPLACE (post_content,'target="_blank"','class="external"'
)

Por supuesto es posible realizar este cambio sobre determinados registros utilizando where en la consulta.

Referencias

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

8 Respuestas para “Reemplazar cadenas en MySQL”

  1. Mil Gracias por este post, me soluciono un problema al que le venía pensando desde un buen rato.

    Saludos.

  2. Genial, yo también te lo agradezco!
    Me has ahorrado un bueeeeeeeen tiempo de trabajo 😀

    Saludos

  3. Una consulta, la query esta esta muy buena, pero si lo que quiero reemplazar es un salto de linea. como podria hacerlo?
    pone /n, cosa que crei que pasaria.

    Si tenes alguna idea te lo agradesco mucho!.

    Gracias.
    Facundo.

  4. Hola Faku, tendrías que utilizar expresiones regulares, pero creo que actualmente MySQL no soporta la sustitución de cadenas utilizando estas expresiones. Permite el uso de regexp pero únicamente para encontrar apariciones en el texto.

    Lo único que se me ocurre es que utilices REGEXP para obtener los registros que tienen algún salto de línea «\n» en el texto, y desde PHP hacer la sustitución con ereg_replace o preg_replace.

    Un saludo

  5. Buenas,

    veo que el post tiene algún tiempo, pero os dejo mi pregunta por si alguien puede echar un cable.
    Yo hago una consulta con el fin de cambiar los campos que contienen exactamente «DB00» en mi base de datos por NULL. Hasta aquí bien. El problema es que hay campos que contienen DB00yalgomás y esos también son sustituidos por NULL. ¿Cómo podría cambiar sólo los que son exactamente DB00?

    Saludos y Gracias.

  6. Hola Jose, para hacer ese cambio no hace falta utilizar REPLACE, haz simplemente «WHERE nombrecampo=’DB00′»

  7. Buenas, tengo una consulta, tengo una tabla con 4500 registros de lineas telefónicas, quisiera saber como puedo cambiar los prefijos de las lineas telefónicas con una sola consulta, pero por posición, debido a que se uso repace, puede reemplazarme todos los números, favor, les agradecería su ayuda.

Trackbacks/Pingbacks

  1. Anuncio IMPORTANTE: ¡Nos mudamos! | Emarts - 20. Mar, 2008

    […] Este excelente tutorial me ayudo mucho para reemplazar cadenas en la base de datos, cosa que me permitio eliminar cadenas de texto que contenieran la vieja url del blog en los post y por supuesto reemplazar urls caducadas en los attachs, esta sencilla función del MySQL me ahorro muuuuuuuuuuuuuuuuuuuuuuucho tiempo 😀 […]