PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да форматирате числата като валута в PostgreSQL

За да форматирате число като валута в 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

Забележете, че той потисна водещите празни места между знака за долар и числото.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres 9.4 jsonb масив като таблица

  2. Как да актуализирам автоматично времеви печат в PostgreSQL

  3. Индексиране на база данни накратко с B+tree и Hash в сравнение

  4. Как да активирате бавния вход на заявка в PostgreSQL

  5. Серийни номера на група редове за съставен ключ