Реализованы на SQL и PL/pgSQL соответственно.
Выводит денежную сумму прописью (словами).
Подробное описание в to_text.sql
Примеры:
select to_text (123.45, 'рубль');
to_text
------------------------------------------
сто двадцать три рубля сорок пять копеек
Кроме рублей можно указать: доллар или евро:
select to_text(1,'доллар') as dollar, to_text(15,'евро') as euro;
dollar | euro
-------------------------+-----------------------------
один доллар ноль центов | пятнадцать евро ноль центов
Копейки можно цифрами:
select to_text(7.77, 'рубль', scale_mode => 'int');
to_text
-----------------------
семь рублей 77 копеек
А если копеек нет, то можно без них:
select to_text(100, 'рубль', scale_mode => 'none');
to_text
------------
сто рублей
Целые числа можно в тоннах:
select to_text(100, 'тонна', scale_mode => 'none');
to_text
----------
сто тонн
Функция to_text
требует точного указания значений параметров.
Можно обернуть её вызов в другую функцию, где допускаются послабления и
расширяется функционал.
Например, функция uom2text
:
amount
сразу имеет тип данныхbigint
, во избежание дробной части.uom
допускает не только 'тонна', но 'т.', 'т'. Причем в любом регистре.- Дополнительный параметр
text_case
преобразует вывод в нужный регистр символов.
UOM - Units Of Measurement - единицы измерения
Примеры:
select uom2text(1, 'тоННа');
uom2text
------------
Одна тонна
select uom2text(16, 'т.', 'upper');
uom2text
------------------
ШЕСТНАДЦАТЬ ТОНН
-- Пример добавления новой валюты. Этот патч добавляет поддержку евро.
Схожим образом можно добавлять килограммы, метры, пр.
Их добавить даже чуть проще - не нужна дробная часть.