2015-06-29 17:27 GMT-03:00 PAULO <pa...@visualpsistemas.com.br>: > Preciso substituir caracteres em tempo de execução e estou tentando: > > > > SELECT TRANSLATE(info_fisco, 'var2', '0.65') from cfop where cod_ cfop = > '5102'; > > > > "PERMITE O APROVEITAMENTO DE CREDITO DE ICMS NO VALOR DE R$ *var1* > CORRESPONDENTE À ALIQUOTA DE *var2*% , NOS TERMOS DO > > ART 23 DA LC 123" > > > > -Primeiro select 100%., no Segundo: > > > > SELECT TRANSLATE(info_fisco, 'var1', '123.45') from cfop where cod_ cfop = > '5102'; > > > > Ele arredonda o 123.45 para 123. E ignora os centavos. >
Ele não "arredonda", acontece que o translate não serve para o que você quer, e você está completamente errado em tentar utilizá-lo desta forma. No caso você pode simplesmente usar o replace: SELECT replace(replace(info_fisco, 'var1', '0.65'), 'var2', '123.45') ... Veja em [1] para mais detalhes e exemplos dessas funções. Entenda a translate e veja se não está utilizando-a em outras situações dessa maneira. De qualquer maneira, o replace dessa forma é bem fraco e geralmente gera dores de cabeça no futuro, caso tenha "var1" ou "var2" no meio do texto por qualquer motivo, vira uma zona. Ou casos piores, como variável "foo" e "foobar". Eu recomendo você usar a função format [2]. [1] http://www.postgresql.org/docs/current/static/functions-string.html [2] http://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-FORMAT Atenciosamente, -- Matheus de Oliveira
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral