Problema:
Você gostaria de converter uma string em um valor decimal no PostgreSQL.
Vamos converter o valor em uma string para um tipo de dados DECIMAL.
Solução 1:
Usaremos o operador ::. Aqui está a consulta que você escreveria:
SELECT ' 5800.79 '::DECIMAL;
Aqui está o resultado:
numérico |
---|
5800,79 |
Como você percebe, os espaços à esquerda e à direita foram removidos.
Discussão:
Use o operador ::para converter strings contendo valores numéricos para o tipo de dados DECIMAL. Em nosso exemplo, convertemos a string ‘ 5800,79 ’ para 5800,79 (um valor DECIMAL).
Este operador é usado para converter entre diferentes tipos de dados. É muito popular no PostgreSQL. Você também pode usar o operador SQL padrão,
CAST()
, em vez do ::
operador. Solução 2:
SELECT CAST(' 5800.79 ' AS DECIMAL );
Aqui está o resultado:
numérico |
---|
5800,79 |
Observe que
CAST()
, como o ::
operador, remove espaços adicionais no início e no final da string antes de convertê-la em um número. O banco de dados PostgreSQL fornece mais uma maneira de converter. Use o
TO_NUMBER()
função se você precisar converter strings mais complicadas. Esta função recebe dois argumentos:a string a ser convertida e a máscara de formato que indica como cada caractere da string deve ser interpretado. Veja o exemplo abaixo:Solução 3:
SELECT TO_NUMBER(' 5 800,79- ', 'FM9G999D99S' );
Aqui está o resultado:
numérico |
---|
-5800,79 |
A string de formato descreve a string que contém o número (valor de entrada como string). Neste exemplo, esta máscara contém o símbolo ‘FM’, que remove os espaços à esquerda e à direita. O '9' indica um dígito (no nosso exemplo, 5) e o 'G' representa um grupo de dígitos (no nosso exemplo, um espaço indica um grupo de milhares).
Em seguida, '999' indica mais três dígitos (800).
O símbolo 'D' especifica um marcador decimal (aqui, um ponto/ponto '.'). Após o símbolo decimal vem '99', ou dois dígitos fracionários.
O último símbolo, 'S', especifica o uso de um sinal de mais ou menos (nosso número é negativo, então recebe um sinal de menos).
Aqui estão os símbolos mais usados para esta máscara:
símbolo | descrição |
---|---|
FM | zeros à esquerda e espaços em branco |
9 | um dígito |
. | ponto decimal local |
G | separador de grupo |
D | separador decimal local |
S | sinal de menos ou mais |
L | símbolo da moeda local |
Você pode encontrar mais informações de formatação numérica na documentação do PostgreSQL.