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

Reply via email to