SQLite има printf()
функция или format()
функция, която ни позволява да форматираме числа според форматиращ низ.
От SQLite 3.18.0 той приема флаг със запетая, което ни позволява да имаме разделители на запетая на хилядите марки за цели числа.
Може да се направи допълнителна работа, за да работи с реални числа/числа с плаваща запетая.
Пример
Ето пример за форматиране на цяло число със запетая като разделител на хилядите:
SELECT printf("%,d", 123456789);
Резултат:
123,456,789
Форматният низ на "%,d"
е това, което определи този резултат.
Реални числа/числа с плаваща запетая
Горното решение работи само при връщане на числото без неговата дробна част.
Нека приложим този форматен низ към реално число:
SELECT printf("%,d", 1234567.4567);
Резултат:
1,234,567
Все още получаваме запетаи като разделители на групи, защото нашият форматен низ не включва дробната част.
Ето как да върнете дробната част:
SELECT printf("%.2f", 1234567.4567);
Резултат:
1234567.46
Тук, низът за формат на "%.2f"
указва, че резултатът трябва да включва два знака след десетичната запетая. Можем да използваме "%.3f"
за три знака след десетичната запетая и т.н.
Може да предположите, че можем да направим следното:
SELECT printf("%,d.2f", 1234567.4567);
Резултат:
1,234,567.2f
Но това очевидно не проработи.
SQLite не ни предоставя обширни възможности за форматиране на числа. Форматирането на числата може да бъде доста ангажирано и обикновено е по-добре да приложите форматирането на ниво приложение.
Въпреки това, ако наистина трябва да направите това в SQLite, можете да опитате да форматирате цялата част със запетаи, след което да я конкатенирате с десетичната част.
Например, да предположим, че имаме колона в базата данни, наречена price
, което връща следния резултат:
SELECT price FROM Products;
Резултат:
5457.99 1238999.99 11.357 3.49 3.0001 1234567.89 1499.5 9.49 149
Бихме могли да направим нещо по следните редове, за да форматираме всички тези числа с разделител за хиляди и десетична запетая:
SELECT
printf("%,d", price)
||
substr(
printf("%.2f", price),
instr(printf("%.2f", price), "."),
length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
)
FROM Products;
Резултат:
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()
Функция
SQLite 3.38.0 (издадена на 22 февруари 2022 г.) преименува printf()
функция към format()
. Оригиналният printf()
името се запазва като псевдоним за обратна съвместимост.
Следователно първият пример на тази страница може да бъде променен, както следва:
SELECT format("%,d", 123456789);
Резултат:
123,456,789