SQLite ma funkcję printf()
funkcja lub format()
funkcja, która pozwala nam formatować liczby zgodnie z ciągiem formatującym.
Począwszy od SQLite 3.18.0, akceptuje flagę przecinka, która umożliwia nam stosowanie separatorów przecinków w tysiącach znaków dla liczb całkowitych.
Można wykonać dalszą pracę, aby działała z liczbami rzeczywistymi/zmiennoprzecinkowymi.
Przykład
Oto przykład formatowania liczby całkowitej z przecinkiem jako separatorem tysięcy:
SELECT printf("%,d", 123456789);
Wynik:
123 456 789
Ciąg formatu "%,d"
jest tym, co zadecydowało o tym wyniku.
Liczby rzeczywiste/zmiennoprzecinkowe
Powyższe rozwiązanie działa tylko podczas zwracania liczby bez jej części ułamkowej.
Zastosujmy ten ciąg formatujący do liczby rzeczywistej:
SELECT printf("%,d", 1234567.4567);
Wynik:
1234 567
Nadal otrzymujemy przecinki jako separatory grup, ponieważ nasz ciąg formatu nie zawiera części ułamkowej.
Oto jak zwrócić część ułamkową:
SELECT printf("%.2f", 1234567.4567);
Wynik:
1234567.46
Tutaj ciąg formatu "%.2f"
określa, że wynik powinien zawierać dwa miejsca po przecinku. Moglibyśmy użyć "%.3f"
dla trzech miejsc po przecinku i tak dalej.
Możesz założyć, że możemy wykonać następujące czynności:
SELECT printf("%,d.2f", 1234567.4567);
Wynik:
1234567.2f
Ale to najwyraźniej nie zadziałało.
SQLite nie zapewnia nam rozbudowanych możliwości formatowania liczb. Formatowanie liczb może być dość skomplikowane i zwykle lepiej jest zastosować formatowanie na poziomie aplikacji.
To powiedziawszy, jeśli naprawdę musisz to zrobić w SQLite, możesz spróbować sformatować część całkowitą za pomocą przecinków, a następnie połączyć ją z częścią dziesiętną.
Załóżmy na przykład, że mamy kolumnę bazy danych o nazwie price
, który zwraca następujący wynik:
SELECT price FROM Products;
Wynik:
5457,99 1238999.9911.357 3,49 3.0001 1234567.891499.5 9,49 149
Moglibyśmy zrobić coś w następujących wierszach, aby sformatować wszystkie te liczby za pomocą separatora tysięcy i kropka dziesiętna:
SELECT
printf("%,d", price)
||
substr(
printf("%.2f", price),
instr(printf("%.2f", price), "."),
length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
)
FROM Products;
Wynik:
format()
Funkcja
SQLite 3.38.0 (wydany 22 lutego 2022) zmienił nazwę printf()
funkcja do format()
. Oryginalny printf()
nazwa jest zachowywana jako alias dla wstecznej kompatybilności.
Dlatego pierwszy przykład na tej stronie można zmienić w następujący sposób:
SELECT format("%,d", 123456789);
Wynik:
123 456 789