Formatação de números no PostgreSQL

View: New views
3 Messages — Rating Filter:   Alert me  

Formatação de números no PostgreSQL

by mvleal :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Senhores,

Como faço para utilizar a vírgula como separador decimal nos campos definidos como "numeric(15,2)" por exemplo.

Já tentei de tudo com o "LC_NUMERIC", mas quando vou inserir o valor 1,23 dá erro. Tenho que substituir a vírgula por ponto e transformar o número em 1.23;

Alguém tem alguma idéia.

Aguardo.

Maurício


_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Formatação de números no PostgreSQL

by Leonardo Cezar :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/11/2 mvleal <mvleal@...>:

> Como faço para utilizar a vírgula como separador decimal nos campos
> definidos como "numeric(15,2)" por exemplo.

Voce não faz, não pode.

> Já tentei de tudo com o "LC_NUMERIC", mas quando vou inserir o valor 1,23 dá
> erro. Tenho que substituir a vírgula por ponto e transformar o número em
> 1.23;

AFAIK o parâmetro de configuração LC_NUMERIC apenas controla funções
de formatação [1]

# \pset tuples_only
# \pset border 0
# \x

# SHOW LC_NUMERIC;
lc_numeric en_US.utf-8

SELECT TO_CHAR('1.99'::numeric,'99D99') AS "Meu valor numerico em en_US:";
Meu valor numerico em en_US:   1.99
                                                 ^^
Repare o ponto.

# SHOW LC_NUMERIC;
lc_numeric pt_BR.utf-8

SELECT TO_CHAR('1.99'::numeric,'99D99') AS "Meu valor numerico em pt_BR:";
Meu valor numerico em pt_BR:   1,99
                                                ^^
Repare a virgula.

No console do psql voce também poderia utilizar a variável
numericlocale para alternar entre formatos de saída baseado no sistema
e no locale:

postgres=# \pset numericlocale
Formato numérico baseado no idioma está desabilitado.
postgres=# SELECT '1.99'::NUMERIC;
numeric 1.99

postgres=# \pset numericlocale
Exibindo formato numérico baseado na configuração regional.
postgres=# SELECT '1.99'::NUMERIC;
numeric 1,99

1) http://www.postgresql.org/docs/8.4/interactive/functions-formatting.html


Abraço!

-Leo
--
Leonardo Cezar
http://www.aslid.org.br
http://postgreslogia.wordpress.com
http://www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Formatação de números no PostgreSQL

by JotaComm :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Olá,

Grande dica do Léo. Não sei o que está acontencendo com ele, tá escrevendos posts grandes :)

Uma outra solução possível é:

Segue um exemplo para melhor exemplificar:

CREATE TEMP TABLE foo(foo NUMERIC(10,2));

INSERT INTO foo VALUES (12.00);
INSERT INTO foo VALUES (302.25);

SELECT * FROM foo;
  foo  
--------
  12.00
 302.25
(2 rows)

postgres=# SELECT to_char(foo,'999D99') FROM foo;
 to_char
---------
   12,00
  302,25
(2 rows)





2009/11/2 Leonardo Cezar <lhcezar@...>
2009/11/2 mvleal <mvleal@...>:

> Como faço para utilizar a vírgula como separador decimal nos campos
> definidos como "numeric(15,2)" por exemplo.

Voce não faz, não pode.

> Já tentei de tudo com o "LC_NUMERIC", mas quando vou inserir o valor 1,23 dá
> erro. Tenho que substituir a vírgula por ponto e transformar o número em
> 1.23;

AFAIK o parâmetro de configuração LC_NUMERIC apenas controla funções
de formatação [1]

# \pset tuples_only
# \pset border 0
# \x

# SHOW LC_NUMERIC;
lc_numeric en_US.utf-8

SELECT TO_CHAR('1.99'::numeric,'99D99') AS "Meu valor numerico em en_US:";
Meu valor numerico em en_US:   1.99
                                                ^^
Repare o ponto.

# SHOW LC_NUMERIC;
lc_numeric pt_BR.utf-8

SELECT TO_CHAR('1.99'::numeric,'99D99') AS "Meu valor numerico em pt_BR:";
Meu valor numerico em pt_BR:   1,99
                                               ^^
Repare a virgula.

No console do psql voce também poderia utilizar a variável
numericlocale para alternar entre formatos de saída baseado no sistema
e no locale:

postgres=# \pset numericlocale
Formato numérico baseado no idioma está desabilitado.
postgres=# SELECT '1.99'::NUMERIC;
numeric 1.99

postgres=# \pset numericlocale
Exibindo formato numérico baseado na configuração regional.
postgres=# SELECT '1.99'::NUMERIC;
numeric 1,99

1) http://www.postgresql.org/docs/8.4/interactive/functions-formatting.html


Abraço!

-Leo
--
Leonardo Cezar
http://www.aslid.org.br
http://postgreslogia.wordpress.com
http://www.dextra.com.br/postgres
_______________________________________________


[]s
--
JotaComm
http://jotacomm.wordpress.com

_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral