SQLite har en printf()
funktion eller format()
funktion, der giver os mulighed for at formatere tal i henhold til en formatstreng.
Fra og med SQLite 3.18.0 accepterer den et kommaflag, som gør det muligt for os at have kommaseparatorer ved de tusinde mark for heltal.
Der kan arbejdes yderligere for at få det til at fungere med reelle/floating point-tal.
Eksempel
Her er et eksempel på formatering af et heltal med et komma som tusinde-separator:
SELECT printf("%,d", 123456789);
Resultat:
123,456,789
Formatstrengen "%,d"
er det, der har bestemt dette resultat.
Reelle tal/flydende kommatal
Ovenstående løsning virker kun, når nummeret returneres uden dets brøkdel.
Lad os anvende den formatstreng til et reelt tal:
SELECT printf("%,d", 1234567.4567);
Resultat:
1,234,567
Vi får stadig kommaer som gruppeseparatorer, fordi vores formatstreng ikke inkluderer brøkdelen.
Sådan returnerer du brøkdelen:
SELECT printf("%.2f", 1234567.4567);
Resultat:
1234567.46
Her er formatstrengen "%.2f"
angiver, at resultatet skal indeholde to decimaler. Vi kunne bruge "%.3f"
for tre decimaler og så videre.
Du kan antage, at vi kan gøre følgende:
SELECT printf("%,d.2f", 1234567.4567);
Resultat:
1,234,567.2f
Men det virkede tydeligvis ikke.
SQLite giver os ikke omfattende formateringsmuligheder for tal. Talformatering kan være ret involveret, og det er normalt bedre at anvende formatering på applikationsniveau.
Når det er sagt, hvis du virkelig har brug for at gøre dette i SQLite, kan du prøve at formatere heltalsdelen med kommaer og derefter sammenkæde det med decimaldelen.
Antag for eksempel, at vi har en databasekolonne kaldet price
, der returnerer følgende resultat:
SELECT price FROM Products;
Resultat:
5457.99 1238999.99 11.357 3.49 3.0001 1234567.89 1499.5 9.49 149
Vi kunne gøre noget på følgende måde for at formatere alle disse tal med en tusinde-separator og et decimaltegn:
SELECT
printf("%,d", price)
||
substr(
printf("%.2f", price),
instr(printf("%.2f", price), "."),
length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
)
FROM Products;
Resultat:
5,457.99 1,238,999.99 11.36 3.49 3.00 1,234,567.89 1,499.50 9.49 149.00
format()
Funktion
SQLite 3.38.0 (udgivet 22. februar 2022) omdøbte printf()
funktion til format()
. Den originale printf()
navnet bibeholdes som et alias for bagudkompatibilitet.
Derfor kan det første eksempel på denne side ændres som følger:
SELECT format("%,d", 123456789);
Resultat:
123,456,789