SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Formatar números com uma vírgula no SQLite


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