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.