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