SQLite har en printf()
funktion eller format()
funktion som låter oss formatera tal enligt en formatsträng.
Från och med SQLite 3.18.0 accepterar den en kommaflagga, vilket gör att vi kan ha kommaavgränsare vid tusentals mark för heltal.
Ytterligare arbete kan göras för att få det att fungera med reella tal/flyttal.
Exempel
Här är ett exempel på att formatera ett heltal med kommatecken som tusentalsavgränsare:
SELECT printf("%,d", 123456789);
Resultat:
123,456,789
Formatsträngen för "%,d"
är det som avgjorde detta resultat.
Reella tal/flyttal
Ovanstående lösning fungerar bara när du returnerar numret utan dess bråkdel.
Låt oss tillämpa den formatsträngen på ett reellt tal:
SELECT printf("%,d", 1234567.4567);
Resultat:
1,234,567
Vi får fortfarande kommatecken som gruppseparatorer eftersom vår formatsträng inte inkluderar bråkdelen.
Så här returnerar du bråkdelen:
SELECT printf("%.2f", 1234567.4567);
Resultat:
1234567.46
Här är formatsträngen "%.2f"
anger att resultatet ska innehålla två decimaler. Vi skulle kunna använda "%.3f"
för tre decimaler och så vidare.
Du kan anta att vi kan göra följande:
SELECT printf("%,d.2f", 1234567.4567);
Resultat:
1,234,567.2f
Men det fungerade uppenbarligen inte.
SQLite förser oss inte med omfattande formateringsmöjligheter för siffror. Nummerformatering kan vara ganska involverat, och det är vanligtvis bättre att tillämpa formatering på applikationsnivå.
Som sagt, om du verkligen behöver göra detta i SQLite, kan du försöka formatera heltalsdelen med kommatecken och sedan sammanfoga den med decimaldelen.
Anta till exempel att vi har en databaskolumn som heter price
, som returnerar följande resultat:
SELECT price FROM Products;
Resultat:
5457.99 1238999.99 11.357 3.49 3.0001 1234567.89 1499.5 9.49 149
Vi skulle kunna göra något på följande sätt för att formatera alla dessa siffror med tusentalsavgränsare och en decimalkomma:
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 (släppt 22 februari 2022) döpte om printf()
funktion till format()
. Den ursprungliga printf()
namnet behålls som ett alias för bakåtkompatibilitet.
Därför kan det första exemplet på denna sida ändras enligt följande:
SELECT format("%,d", 123456789);
Resultat:
123,456,789