Ao trabalhar com o Postgres, você pode usar o
to_char()
função para gerar números em um determinado formato. A maneira como funciona é que você fornece dois argumentos. O primeiro argumento é o número a ser formatado. O segundo argumento determina como ele é formatado.
O valor de retorno é texto .
Dependendo de seus requisitos, você pode preferir converter o número para o tipo de dados apropriado, por exemplo, usando o
cast()
função. Exemplos de ambos os métodos estão abaixo.
Exemplo
Aqui está um exemplo básico para demonstrar.
SELECT to_char(10, '99.99');
Resultado:
10.00
O
9
s realmente têm um significado especial neste contexto. Esse caractere é um dos padrões de modelo válidos nos quais sua string de formato pode consistir ao formatar números. No caso de
9
, ele especifica uma posição de dígito, mas se for um zero à esquerda, será substituído por um espaço, enquanto se for um zero à direita e o modo de preenchimento for especificado, ele será excluído. Se eu remover a parte decimal e a parte dos segundos fracionários, recebo um resultado diferente.
SELECT to_char(10, '99');
Resultado:
10
Queda de zeros à esquerda
Você pode substituir
9
com 0
se você deseja suprimir zeros à esquerda e à direita, mesmo quando insignificantes. Aqui está um exemplo que demonstra a diferença entre os dois.
SELECT
to_char(0010, '9999') AS "9999",
to_char(0010, '0000') AS "0000";
Resultado:
9999 | 0000 -------+------- 10 | 0010
Padrões de modelo
Conforme visto nos exemplos anteriores, a string de formato consiste em um ou mais padrões de modelo.
Por exemplo,
9999
é uma string de formato que consiste em quatro padrões de modelo - cada um dos quais é 9
. A casa decimal é outro padrão de modelo.
Eu poderia ter usado um
D
em vez da casa decimal. Isso usa a localidade atual para a formatação real. SELECT
to_char(10, '99.99') AS "99.99",
to_char(10, '99D99') AS "99D99";
Resultado:
99.99 | 99D99 --------+-------- 10.00 | 10.00
Para obter uma lista completa de padrões e modificadores de modelo, consulte Padrões e modificadores de modelo para formatação numérica no Postgres.
Modificadores de padrão de modelo
Há também alguns modificadores que podem ser usados junto com o padrão de modelo. Eles alteram a forma como a saída é formatada, dependendo do modificador usado.
Especificamente, existem três modificadores que podem ser usados com formatação numérica.
Modificador | Descrição |
---|---|
FM prefixo | modo de preenchimento (suprimir zeros à direita e espaços em branco de preenchimento) |
TH sufixo | sufixo de número ordinal maiúsculo |
th sufixo | sufixo de número ordinal em minúsculas |
Observe que o primeiro é adicionado como prefixo ao padrão de modelo e os outros dois são adicionados como sufixo.
Números ordinais
Um requisito comum é converter um número em seu ordinal. Podemos usar
TH
ou th
para isso, dependendo se queremos que o sufixo seja maiúsculo ou minúsculo. Aqui está um exemplo.
SELECT to_char(03, 'FM99th');
Resultado:
3rd
Neste caso eu também usei
FM
para suprimir quaisquer espaços em branco e zeros à direita. Aqui está uma comparação entre o uso de
FM
e omitindo:SELECT
to_char(03, '99th') AS "99th",
to_char(03, 'FM99th') AS "FM99th";
Resultado:
99th | FM99th -------+-------- 3rd | 3rd
Se você olhar de perto, a primeira coluna tem espaços em branco à esquerda, enquanto a segunda coluna não.
Moeda
Outro requisito comum é a saída de um número em uma determinada moeda.
Neste caso, podemos usar o
L
padrão de modelo para exibir um símbolo de moeda com reconhecimento de localidade. SELECT to_char(03, 'LFM99D00');
Resultado:
$3.00
Números assinados
Há também padrões de modelo para números assinados.
Aqui está um exemplo.
SELECT to_char(27, 'S99');
Resultado:
+27
Aqui, usei
S
para adicionar um sinal com reconhecimento de localidade ancorado ao número. Neste caso foi um número positivo. Aqui está outro exemplo que usa um valor negativo.
SELECT to_char(-27, 'S99');
Resultado:
-27
Existem vários outros padrões de modelo que podem ser usados para números assinados.
Para exemplos, consulte Anexar um sinal de mais/menos a um número no Postgres.
E, como mencionado, confira Template Patterns &Modifiers for Numeric Formatting in Postgres para obter uma lista completa de modificadores de template que você pode usar ao formatar números.
Tipo de dados
Como mencionado, o
to_char()
a função gera seu resultado como texto . Dependendo de seus requisitos, talvez seja melhor converter o número em um tipo de dados mais apropriado.
Aqui está um exemplo que converte um número para o dinheiro dados tipo.
SELECT cast(10 as money);
Resultado:
$10.00