SQLite heeft een printf()
functie of format()
functie waarmee we getallen kunnen opmaken volgens een opmaakreeks.
Vanaf SQLite 3.18.0 accepteert het een kommavlag, wat ons in staat stelt om kommascheidingstekens te gebruiken bij de duizendtallen voor gehele getallen.
Er kan nog meer worden gedaan om het werkend te krijgen met reële/zwevende-kommagetallen.
Voorbeeld
Hier is een voorbeeld van het opmaken van een geheel getal met een komma als scheidingsteken voor duizendtallen:
SELECT printf("%,d", 123456789);
Resultaat:
123,456,789
De opmaakreeks van "%,d"
is wat dit resultaat heeft bepaald.
Reële/zwevende kommagetallen
De bovenstaande oplossing werkt alleen als het getal wordt geretourneerd zonder het fractionele deel ervan.
Laten we die notatiereeks toepassen op een reëel getal:
SELECT printf("%,d", 1234567.4567);
Resultaat:
1,234,567
We krijgen nog steeds komma's als scheidingstekens voor groepen, omdat onze opmaakreeks het breukgedeelte niet bevat.
Zo geeft u het breukdeel terug:
SELECT printf("%.2f", 1234567.4567);
Resultaat:
1234567.46
Hier de opmaakreeks van "%.2f"
geeft aan dat het resultaat twee decimalen moet bevatten. We zouden "%.3f"
. kunnen gebruiken voor drie decimalen, enzovoort.
Je zou kunnen aannemen dat we het volgende kunnen doen:
SELECT printf("%,d.2f", 1234567.4567);
Resultaat:
1,234,567.2f
Maar dat werkte duidelijk niet.
SQLite biedt ons geen uitgebreide opmaakmogelijkheden voor getallen. Het opmaken van getallen kan behoorlijk ingewikkeld zijn, en het is meestal beter om opmaak toe te passen op applicatieniveau.
Dat gezegd hebbende, als je dit echt in SQLite moet doen, kun je proberen het gehele deel met de komma's op te maken en dat vervolgens samen te voegen met het decimale deel.
Stel dat we bijvoorbeeld een databasekolom hebben met de naam price
, dat geeft het volgende resultaat:
SELECT price FROM Products;
Resultaat:
5457.99 1238999.99 11.357 3.49 3.0001 1234567.89 1499.5 9.49 149
We zouden iets in de trant van het volgende kunnen doen om al die getallen op te maken met een scheidingsteken voor duizendtallen en een decimale punt:
SELECT
printf("%,d", price)
||
substr(
printf("%.2f", price),
instr(printf("%.2f", price), "."),
length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
)
FROM Products;
Resultaat:
5,457.99 1,238,999.99 11.36 3.49 3.00 1,234,567.89 1,499.50 9.49 149.00
Het format()
Functie
SQLite 3.38.0 (uitgebracht op 22 februari 2022) hernoemde de printf()
functie naar format()
. De originele printf()
naam wordt behouden als een alias voor achterwaartse compatibiliteit.
Daarom kan het eerste voorbeeld op deze pagina als volgt worden gewijzigd:
SELECT format("%,d", 123456789);
Resultaat:
123,456,789