PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como formatar números como moeda no PostgreSQL


Para formatar um número como moeda no Postgres, você pode convertê-lo para o tipo de dados dinheiro ou usar to_char() para convertê-lo em texto que inclua o símbolo de moeda apropriado.

Isso obviamente pressupõe que o número ainda não está armazenado usando o tipo de dinheiro.

Abaixo estão exemplos de cada uma dessas opções.

Converter em dinheiro


Aqui está um exemplo de conversão de um número para o tipo de dados dinheiro.
SELECT cast(12 as money);

Resultado:
$12.00

Aqui está outro exemplo, desta vez usando uma quantidade maior.
SELECT cast(123456.78 as money);

Resultado:
$123,456.78

Converter a partir de um número de ponto flutuante


Não é recomendado usar números de ponto flutuante para lidar com dinheiro devido ao potencial de erros de arredondamento. No entanto, se você precisar fazer isso, poderá converter primeiro em numérico e depois em dinheiro.
SELECT '123456.78'::float8::numeric::money;

Resultado:
$123,456.78

Se você tentar converter diretamente de ponto flutuante para dinheiro, receberá um erro.
SELECT '123456.78'::float8::money;

Resultado:
ERROR:  cannot cast type double precision to money

Converter em texto


Aqui está um exemplo de uso de to_char() para converter o valor em texto com o símbolo de moeda incluído.
SELECT to_char(12, 'L99D99');

Resultado:
$ 12.00

Aqui, tanto o símbolo de moeda quanto a casa decimal usam a localidade atual.

A string de formato para to_char() terá de ser apropriado para o montante esperado.

Por exemplo, se o valor puder chegar a centenas de milhares, a sequência de formato a seguir seria mais apropriada.
SELECT to_char(123456.78, 'L999G999D99');

Resultado:
$ 123,456.78

Neste caso eu adicionei o G padrão de modelo para um separador de grupo com reconhecimento de localidade (também conhecido como "separador de milhares"). Eu poderia ter usado uma vírgula (, ), mas isso não teria reconhecimento de localidade.

E eu novamente adicionei o D padrão de modelo para um ponto decimal com reconhecimento de localidade.

Aqui está o que acontece se eu remover esses dois padrões de modelo da minha string de formato.
SELECT to_char(123456.78, 'L999999');

Resultado:
$ 123457

Zeros insignificantes


Você pode usar 0 em vez de 9 para manter zeros insignificantes.

O 9 padrão de modelo descarta quaisquer zeros insignificantes, enquanto o 0 padrão de modelo não.

Aqui está um exemplo que ilustra a diferença entre os dois.
SELECT 
  to_char(12, 'L9999') AS "L9999",
  to_char(12, 'L0000') AS "L0000";

Resultado:
 L9999  | L0000  
--------+--------
 $   12 | $ 0012

Modo de preenchimento


Há um modificador de padrão de modelo útil chamado FM . Isso é para “modo de preenchimento” e suprime zeros à direita e espaços em branco à esquerda.

Podemos, portanto, usar esse modificador para modificar o exemplo anterior.
SELECT 
  to_char(12, 'LFM9999') AS "LFM9999",
  to_char(12, 'LFM0000') AS "LFM0000";

Resultado:
 LFM9999 | LFM0000 
---------+---------
 $12     | $0012

Observe que ele suprimiu os espaços em branco entre o cifrão e o número.