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.