Substituir texto no MySQL - Wildcards para substituir certas partes variáveis?

2

Estou tentando aplicar uma substituição de texto no meu banco de dados MySQL do WordPress. Eu preciso excluir parte do código html de imagens atuais, mas esta parte do texto é variável, embora haja uma parte que nunca muda.

Existe algum curinga que eu possa usar em uma substituição do MySQL?

Exemplo: gostaria de substituir isso:

<a target="_self" href="actualidad/tecnologia/4455-windows-7-surpasses.html"><img src=”http://www.example.com/files/HIDDEN_264_23662_FOTO_win01.jpg" width="215" height="156" /></a>

para

<img src=”http://www.example.com/files/HIDDEN_264_23662_FOTO_win01.jpg" width="215" height="156" />

E deletar a parte href, então eu estava pensando em uma substituição semelhante a esta:

update wp_posts set post_content = REPLACE 
(post_content, '<a target="_self" href=*<img','<img');

Existe um "*" (ou regexp) que aceita o que há entre o 'href' e o '     

por javipas 17.05.2011 / 16:55

3 respostas

3

Eu geralmente faço batota e despejo do banco de dados em texto, e depois uso sed (ou Notepad ++ se o banco de dados for pequeno o suficiente). Exceto isso, é mais fácil fazer isso de forma programática usando Perl ou Python.

Fazer esse tipo de manipulação com SQL direto é doloroso. Se você fizer isso, eu recomendo strongmente que você evite SUBSTITUIR. Isto não é o que normalmente é usado. Se você for fazer uma alteração em massa nas linhas existentes, use o UPDATE por si só.

    
por 17.05.2011 / 17:31
1

% não funciona neste cenário?

    
por 17.05.2011 / 17:09
1

Infelizmente, não há mais API de expressão regular disponível.

As pessoas levaram rachaduras a ele nos dias do MySQL 4.0, mas tais esforços não chegaram aos binários do MySQL.

link

link

Sua declaração UPDATE deve ser suficiente.

update wp_posts set post_content = REPLACE (post_content, '<a target="_self" href=*<img','<img');

Mesmo que essa API existisse, não há sentido em aplicá-la melhor do que você já tem. Seu UPDATE faz uma varredura completa na tabela. Aplicar um WHERE usando o REGEXP ainda resulta em uma varredura completa da tabela. Você UPDATE original é melhor para o cenário dado.

    
por 17.05.2011 / 17:31