SQLite
 sql >> Database >  >> RDS >> SQLite

Formatta i numeri con una virgola in SQLite

SQLite ha un printf() funzione o format() funzione che ci permette di formattare i numeri secondo una stringa di formato.

A partire da SQLite 3.18.0, accetta una virgola flag, che ci consente di avere separatori di virgola ai segni delle migliaia per i numeri interi.

È possibile fare ulteriore lavoro per farlo funzionare con numeri in virgola mobile/reale.

Esempio

Ecco un esempio di formattazione di un numero intero con una virgola come separatore delle migliaia:

SELECT printf("%,d", 123456789);

Risultato:

123,456,789

La stringa di formato di "%,d" è ciò che ha determinato questo risultato.

Numeri in virgola mobile/reale

La soluzione sopra funziona solo quando si restituisce il numero senza la sua parte frazionaria.

Applichiamo quella stringa di formato a un numero reale:

SELECT printf("%,d", 1234567.4567);

Risultato:

1,234,567

Otteniamo ancora le virgole come separatori di gruppo, perché la nostra stringa di formato non include la parte frazionaria.

Ecco come restituire la parte frazionaria:

SELECT printf("%.2f", 1234567.4567);

Risultato:

1234567.46

Qui, la stringa di formato di "%.2f" specifica che il risultato deve includere due cifre decimali. Potremmo usare "%.3f" per tre cifre decimali e così via.

Potresti presumere che possiamo fare quanto segue:

SELECT printf("%,d.2f", 1234567.4567);

Risultato:

1,234,567.2f

Ma chiaramente non ha funzionato.

SQLite non ci fornisce funzionalità di formattazione estese per i numeri. La formattazione dei numeri può essere piuttosto complicata e di solito è meglio applicare la formattazione a livello di applicazione.

Detto questo, se hai davvero bisogno di farlo in SQLite, potresti provare a formattare la parte intera con le virgole, quindi concatenarla con la parte decimale.

Ad esempio, supponiamo di avere una colonna del database chiamata price , che restituisce il seguente risultato:

SELECT price FROM Products;

Risultato:

5457.99   
1238999.99
11.357    
3.49      
3.0001    
1234567.89
1499.5    
9.49      
149  

Potremmo fare qualcosa come segue per formattare tutti quei numeri con un separatore di migliaia e un punto decimale:

SELECT
    printf("%,d", price) 
    || 
    substr(
    printf("%.2f", price), 
    instr(printf("%.2f", price), "."), 
    length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
    )
FROM Products;

Risultato:

5,457.99                                                                                                                                                                                     
1,238,999.99                                                                                                                                                                                 
11.36                                                                                                                                                                                        
3.49                                                                                                                                                                                         
3.00                                                                                                                                                                                         
1,234,567.89                                                                                                                                                                                 
1,499.50                                                                                                                                                                                     
9.49                                                                                                                                                                                         
149.00   

Il format() Funzione

SQLite 3.38.0 (rilasciato il 22 febbraio 2022) è stato rinominato printf() funzione in format() . L'originale printf() name viene mantenuto come alias per la compatibilità con le versioni precedenti.

Pertanto, il primo esempio in questa pagina può essere modificato come segue:

SELECT format("%,d", 123456789);

Risultato:

123,456,789