Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda com a função update + replace


fatherofpain

Pergunta

Bom, eu já ví alguns tópicos respondendo dúvidas semelhantes a minha mas nenhum esclarece a minha dúvida. eu sei usar a função update + replace normalmente mas o problema é que eu desejo substituir um código em html que usa aspas "" mas na hora de executar o update da conflito com a sintaxe do comando.

exemplo: assim funciona corretamente:

update cgd_post set post = replace(post, "casa", "apartamento");

ou seja, vai substituir a palavra casa por apartamento.

Acontece que eu quero substituir uma url em html assim: <a href="http://www.uol.com.br">site</a> pela palavra site, eu coloco o comando dessa forma:

update cgd_post set post = replace(post, "<a href="http://www.uol.com.br">site</a>", "site"); mas da erro devido as aspas que estão no codigo em html :( o que eu posso fazer para que o mysql ignore as apas e execute a função ?

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0
Acontece que eu quero substituir uma url em html assim: <a href="http://www.uol.com.br">site</a>'>http://www.uol.com.br">site</a> pela palavra site, eu coloco o comando dessa forma:

update cgd_post set post = replace(post, "<a href="http://www.uol.com.br">site</a>'>http://www.uol.com.br">site</a>", "site"); mas da erro devido as aspas que estão no codigo em html :( o que eu posso fazer para que o mysql ignore as apas e execute a função ?

fatherofpain, eu sugeriria a você que trocasse as "(aspas duplas), na URL, por '(aspas simples) ou mesmo pelo texto ":

update cgd_post set post = replace(post, "<a href='http://www.uol.com.br'>site</a>", "site");

Isto não deverá interferir na sua utilização em arquivos HTML, conforme você pode verificar em "HTML 4.01 Specification", especificamente no item 3.2.2 Attributes - eles são intercambiáveis:

"By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa. Authors may also use numeric character references to represent double quotes (") and single quotes ('). For double quotes authors can also use the character entity reference "." (ref. W3C)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Muitissimo obrigado pela ajuda Micheus, realmente dessa forma o mysql executa o update replace e não da erro de sintaxe porém os códigos que já estão no banco de dados não são alterados pois o mesmos estão usando as aspas duplas " " e não as simples ' '. o grande problema é que eu tenho um banco de dados com 150 mb e fica dificil editar todas as " " manualmente.

Link para o comentário
Compartilhar em outros sites

  • 0
Muitissimo obrigado pela ajuda Micheus, realmente dessa forma o mysql executa o update replace e não da erro de sintaxe porém os códigos que já estão no banco de dados não são alterados pois o mesmos estão usando as aspas duplas " " e não as simples ' '. o grande problema é que eu tenho um banco de dados com 150 mb e fica dificil editar todas as " " manualmente.

fatherofpain, então você poderia fazer esta mudança na istrução SQL: trocar o " por ':

update cgd_post set post = replace(post, '<a href="http://www.uol.com.br">site</a>', "site");

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

O engraçado é que eu digito desta forma:

update cgd_post set post = replace(post, '<a href="http://www.uol.com.br">site</a>', "site");

o mysql executa a função e retorna isso:

Query: update cgd_post set post = replace(post, 'site', "site");

Executed Successfully

mas nada é alterado. tudo permanece exatamente como estava.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'fatherofpain' !

Para substituir caracteres especiais (no caso aspas simples e aspas duplas no mysql você deve utilizar da seguinte maneira:

UPDATE cgd_post

SET post = REPLACE(post, \", \');

[/sq]

Ver manual do mysql versão 4.1 tradução em portugês capítulo 6)

Link para o comentário
Compartilhar em outros sites

  • 0
Para substituir caracteres especiais (no caso aspas simples e aspas duplas no mysql você deve utilizar da seguinte maneira:

UPDATE cgd_post 
SET post = REPLACE(post, \", \');

Pois é Denis Courcy, esqueci que ainda estes dias você já tinha falado algo sobre estas barras em funções. :blush:

Eu entendi que ele queria apenas substituir um texto pelo outro e que o caracter especial que aparece no meio dele não seria levado em conta pela função, porque em termos de atribuição direta do texto a um campo, não há este tipo de problema (não com a versão 5 que tenho instalada).

Descupe aí, fatherofpain

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Para substituir caracteres especiais (no caso aspas simples e aspas duplas no mysql você deve utilizar da seguinte maneira:

UPDATE cgd_post 
SET post = REPLACE(post, \", \');

Pois é Denis Courcy, esqueci que ainda estes dias você já tinha falado algo sobre estas barras em funções. :blush:

Eu entendi que ele queria apenas substituir um texto pelo outro e que o caracter especial que aparece no meio dele não seria levado em conta pela função, porque em termos de atribuição direta do texto a um campo, não há este tipo de problema (não com a versão 5 que tenho instalada).

Descupe aí, fatherofpain

Abraços

Oi, Micheus!

Realmente não há problema quando se usa " ' " para simbolizar a aspa simples, como no exemplo(ou outro caracter especial), como caracter e um texto. Mas quando há a necessidade de substituir um caracter apenas, dentro de um texto, a melhor forma é o uso de caracteres especiais.

Ver manual do mysql edição em inglês versão 5.0 Chapter 9. Language Structure 9.1. Literal Values.

Link para o comentário
Compartilhar em outros sites

  • 0

Caraca, ainda deu erro. executei da forma como o Denis falou e deu o seguinte erro de sintaxe: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\", \')' at line 1

Quanto a minha intenção era simplesmente trocar um link em comum que eu tenho em todas as tabelas do meu BD por apenas uma palavra (sem links) então a substituição seria: trocar a url http://www.uol.com.br pela palavra site. acontece que nas tabelas a url está em html assim: <a href="http://www.uol.com.br">site</a> e eu quero retirar todo o html e deixar apenas a palavra site. O grande problema é que na hora de usar a função update + replace a mesma retorna erro de sintaxe devido as aspas duplas que estão no html que forma o link. eu substitui manualmente as aspas duplas por aspas simples em uma das tabelas e executei o update pelo mysql e ele acusou que havia substituido o link completo pela palavra simples mas quando verifiquei na tabela continuou tudo o mesmo (ou seja, o link completo).

Valeu pela ajuda pessoal mas pelo visto esse problema é impossivel de ser resolvido. de qualquer forma esse é um dos melhores fóruns que já participei (sem puxação de saco) mas na maioria dos fóruns, membro novo é tratado como lixo. eu gostaria de colaborar com o fórum mas a area que domino (clipper e pascal) mas isso já está ultrapassada :(

Editado por fatherofpain
Link para o comentário
Compartilhar em outros sites

  • 0
Quanto a minha intenção era simplesmente trocar um link em comum que eu tenho em todas as tabelas do meu BD por apenas uma palavra (sem links) então a substituição seria: trocar a url http://www.uol.com.br pela palavra site. acontece que nas tabelas a url está em html assim: <a href="http://www.uol.com.br">site</a> e eu quero retirar todo o html e deixar apenas a palavra site.

Experimente

SET post = REPLACE(post, '\"', "\'");
Denis Courcy, este post é apenas para reforçar a necessidade do colega. Acredito que seria algo como:
SET post = REPLACE(post, '<a href=\"http://www.uol.com.br\">site</a>', 'site');

Veja o que você acha?

Abraços

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...