SQLite tem um
printf()
função ou format()
função que nos permite formatar números de acordo com uma string de formato. A partir do SQLite 3.18.0, ele aceita um sinalizador de vírgula, o que nos permite ter separadores de vírgulas nas marcas de milhares para inteiros.
Mais trabalho pode ser feito para fazê-lo funcionar com números de ponto real/flutuante.
Exemplo
Aqui está um exemplo de formatação de um inteiro com uma vírgula como separador de milhares:
SELECT printf("%,d", 123456789);
Resultado:
123,456,789
A string de formato de
"%,d"
foi o que determinou esse resultado. Números de ponto real/flutuante
A solução acima só funciona ao retornar o número sem sua parte fracionária.
Vamos aplicar essa string de formato a um número real:
SELECT printf("%,d", 1234567.4567);
Resultado:
1,234,567
Ainda recebemos vírgulas como separadores de grupo, porque nossa string de formato não inclui a parte fracionária.
Veja como retornar a parte fracionária:
SELECT printf("%.2f", 1234567.4567);
Resultado:
1234567.46
Aqui, a string de formato de
"%.2f"
especifica que o resultado deve incluir duas casas decimais. Poderíamos usar "%.3f"
para três casas decimais, e assim por diante. Você pode supor que podemos fazer o seguinte:
SELECT printf("%,d.2f", 1234567.4567);
Resultado:
1,234,567.2f
Mas isso claramente não funcionou.
O SQLite não nos fornece recursos extensivos de formatação para números. A formatação numérica pode ser bastante complicada e geralmente é melhor aplicar a formatação no nível do aplicativo.
Dito isso, se você realmente precisar fazer isso no SQLite, tente formatar a parte inteira com as vírgulas e concatenar isso com a parte decimal.
Por exemplo, suponha que temos uma coluna de banco de dados chamada
price
, que retorna o seguinte resultado:SELECT price FROM Products;
Resultado:
5457.99 1238999.99 11.357 3.49 3.0001 1234567.89 1499.5 9.49 149
Poderíamos fazer algo ao longo das linhas a seguir para formatar todos esses números com um separador de milhares e um ponto decimal:
SELECT
printf("%,d", price)
||
substr(
printf("%.2f", price),
instr(printf("%.2f", price), "."),
length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
)
FROM Products;
Resultado:
5,457.99 1,238,999.99 11.36 3.49 3.00 1,234,567.89 1,499.50 9.49 149.00
O format()
Função
SQLite 3.38.0 (lançado em 22 de fevereiro de 2022) renomeou o
printf()
função para format()
. O printf()
original name é mantido como um alias para compatibilidade com versões anteriores. Portanto, o primeiro exemplo nesta página pode ser alterado da seguinte forma:
SELECT format("%,d", 123456789);
Resultado:
123,456,789