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

Como remover zeros à direita de um decimal no PostgreSQL

Problema:


Você gostaria de remover zeros à direita da parte fracionária de um número decimal.

Exemplo:


Nosso banco de dados tem uma tabela chamada ribbon com dados nas colunas id , nome , e largura (em metros, denotado por um número decimal com uma parte fracionária de 4 dígitos).
id nome largura
1 Grande Cetim N24 1,2000
2 Criação Yc2 0,5500
3 Três cores 4F1 3.2050
4 Blue Ribbon LB1 0,1265

Vamos obter os nomes das fitas junto com sua largura em metros, mas sem zeros à direita.

Solução:


Usaremos o operador ‘::’ para converter o número decimal em um tipo de dados REAL. Aqui está a consulta que você escreveria:
SELECT name, 
  width::REAL 
FROM ribbon;

Aqui está o resultado:
nome new_width
Grande Cetim N24 1.2
Criação Yc2 0,55
Três cores 4F1 3.205
Fita Azul LB1 0,1265

Discussão:


Use o :: operador para converter um número decimal contendo zeros à direita em um número sem zeros adicionais. Este operador converte o valor à esquerda para o tipo de dados colocado à direita.

Em nosso exemplo, o valor decimal em largura foi convertido para o tipo de dados REAL, que não exibe zeros à direita. A fita 'Large Satin N24' tem uma width valor de 1,2000 – mas não precisamos de zeros na parte fracionária deste número. Portanto, convertemos para o tipo de dados REAL para cortá-los (no nosso exemplo, três zeros foram removidos). É uma maneira conveniente de exibir o número porque remove apenas os zeros à direita; por exemplo, 'Blue Ribbon LB1' não possui zeros à direita após o ponto decimal, portanto, seu valor permanece o mesmo após a conversão.

Se você tiver o mesmo número de zeros na parte fracionária de todos os seus valores, use o TRUNC() função. Recebe dois argumentos:o valor/nome da coluna contendo o número e um inteiro indicando o número desejado de dígitos fracionários; o resto é cortado. Veja o mesmo exemplo com valores diferentes na coluna width :
id nome largura
1 Grande Cetim N24 1.200
2 Criação Yc2 0,500
3 Três cores 4F1 3.200
4 Blue Ribbon LB1 0,100

Solução 2:


Aqui está a consulta que você escreveria:
SELECT name, 
  TRUNC(width,1) 
FROM ribbon;

Aqui está o resultado:
nome new_width
Grande Cetim N24 1.0
Criação Yc2 0,5
Três cores 4F1 3.2
Fita Azul LB1 0,1

Apenas um dígito é exibido na parte decimal. Observe que TRUNC() corta todos os dígitos, não apenas zeros.