За да форматирате число като валута в Postgres, можете или да го преобразувате в типа данни за пари, или да използвате to_char()
за да го преобразувате в текст, който включва съответния символ за валута.
Това очевидно предполага, че номерът вече не е съхранен с помощта на типа пари.
По-долу са дадени примери за всяка от тези опции.
Конвертиране в пари
Ето пример за преобразуване на число в тип данни за пари.
SELECT cast(12 as money);
Резултат:
$12.00
Ето още един пример, този път с по-голямо количество.
SELECT cast(123456.78 as money);
Резултат:
$123,456.78
Преобразуване от число с плаваща запетая
Препоръчително е да не използвате числа с плаваща запетая за обработка на пари поради възможността от грешки при закръгляването. Въпреки това, ако трябва да го направите, можете първо да конвертирате в число, след това в пари.
SELECT '123456.78'::float8::numeric::money;
Резултат:
$123,456.78
Ако се опитате да конвертирате директно от плаваща запетая в пари, ще получите грешка.
SELECT '123456.78'::float8::money;
Резултат:
ERROR: cannot cast type double precision to money
Преобразуване в текст
Ето пример за използване на to_char()
за да конвертирате стойността в текст с включен символ на валута.
SELECT to_char(12, 'L99D99');
Резултат:
$12.00
Тук и символът на валутата, и десетичният знак използват текущия локал.
Форматният низ за to_char()
ще трябва да отговаря на очакваната сума.
Например, ако сумата може да достигне стотици хиляди, тогава следният форматен низ би бил по-подходящ.
SELECT to_char(123456.78, 'L999G999D99');
Резултат:
$123,456.78
В този случай добавих G
шаблонен шаблон за разделител на групи, съобразен с локала (наричан още „разделител на хиляди“). Можех да използвам запетая (,
), но това не би било наясно с локала.
И отново добавих D
шаблонен шаблон за десетична запетая, съобразена с локал.
Ето какво се случва, ако премахна тези два шаблона от моя форматен низ.
SELECT to_char(123456.78, 'L999999');
Резултат:
$ 123457
Незначителни нули
Можете да използвате 0
вместо 9
за да запазите незначителни нули.
9
шаблонът пуска всички незначителни нули, докато 0
шаблонът не го прави.
Ето пример, който илюстрира разликата между двете.
SELECT
to_char(12, 'L9999') AS "L9999",
to_char(12, 'L0000') AS "L0000";
Резултат:
L9999 | L0000 --------+-------- $ 12 | $ 0012
Режим на запълване
Има удобен модификатор на шаблона, наречен FM
. Това е за „режим на запълване“ и потиска крайните нули и водещите празни места.
Следователно можем да използваме този модификатор, за да модифицираме предишния пример.
SELECT
to_char(12, 'LFM9999') AS "LFM9999",
to_char(12, 'LFM0000') AS "LFM0000";
Резултат:
LFM9999 | LFM0000 ---------+--------- $12 | $0012
Забележете, че той потисна водещите празни места между знака за долар и числото.