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

Como formatar números no PostgreSQL


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