SumInWords

Материал из iDempiere ru
Перейти к:навигация, поиск

Функции


Функция PostgreSQL для написания суммы словами.

SELECT SumInWords(356859.25);
result:  'триста пятьдесят шесть тысяч восемьсот пятьдесят девять  рублeй 25 копeeк'

  -------------------------------------------------------
  CREATE OR REPLACE FUNCTION SumInWords(numeric)
    RETURNS character varying AS
  $BODY$
  DECLARE
  	tnInNmb			ALIAS FOR $1 ;
      
      result			VARCHAR ;
  BEGIN
     -- k - копейки
    result := ltrim(to_char(tnInNmb, '9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99')) || 'k';
    -- t - тысячи; m - милионы; M - миллиарды;
    result := replace( result, ',,,,,,', 'eM');
    result := replace( result, ',,,,,', 'em');
    result := replace( result, ',,,,', 'et');
    -- e - единицы; d - десятки; c - сотни;
    result := replace( result, ',,,', 'e');
    result := replace( result, ',,', 'd');
    result := replace( result, ',', 'c');
    --
    result := replace( result, '0c0d0et', );
    result := replace( result, '0c0d0em', );
    result := replace( result, '0c0d0eM', );
    --
    result := replace( result, '0c', );
    result := replace( result, '1c', 'сто ');
    result := replace( result, '2c', 'двести ');
    result := replace( result, '3c', 'триста ');
    result := replace( result, '4c', 'четыреста ');
    result := replace( result, '5c', 'пятьсот ');
    result := replace( result, '6c', 'шестьсот ');
    result := replace( result, '7c', 'семьсот ');
    result := replace( result, '8c', 'восемьсот ');
    result := replace( result, '9c', 'девятьсот ');
    --
    result := replace( result, '1d0e', 'десять ');
    result := replace( result, '1d1e', 'одиннадцать ');
    result := replace( result, '1d2e', 'двенадцать ');
    result := replace( result, '1d3e', 'тринадцать ');
    result := replace( result, '1d4e', 'четырнадцать ');
    result := replace( result, '1d5e', 'пятнадцать ');
    result := replace( result, '1d6e', 'шестнадцать ');
    result := replace( result, '1d7e', 'семьнадцать ');
    result := replace( result, '1d8e', 'восемнадцать ');
    result := replace( result, '1d9e', 'девятнадцать ');
    --
    result := replace( result, '0d', );
    result := replace( result, '2d', 'двадцать ');
    result := replace( result, '3d', 'тридцать ');
    result := replace( result, '4d', 'сорок ');
    result := replace( result, '5d', 'пятьдесят ');
    result := replace( result, '6d', 'шестьдесят ');
    result := replace( result, '7d', 'семьдесят ');
    result := replace( result, '8d', 'восемьдесят ');
    result := replace( result, '9d', 'девяносто ');
    --
    result := replace( result, '0e', );
    result := replace( result, '5e', 'пять ');
    result := replace( result, '6e', 'шесть ');
    result := replace( result, '7e', 'семь ');
    result := replace( result, '8e', 'восемь ');
    result := replace( result, '9e', 'девять ');
    --
    result := replace( result, '1e.', 'один рубль ');
    result := replace( result, '2e.', 'два рубля ');
    result := replace( result, '3e.', 'три рубля ');
    result := replace( result, '4e.', 'четыре рубля ');
    result := replace( result, '1et', 'одна тысяча ');
    result := replace( result, '2et', 'две тысячи ');
    result := replace( result, '3et', 'три тысячи ');
    result := replace( result, '4et', 'четыре тысячи ');
    result := replace( result, '1em', 'один миллион ');
    result := replace( result, '2em', 'два миллиона ');
    result := replace( result, '3em', 'три миллиона ');
    result := replace( result, '4em', 'четыре миллиона ');
    result := replace( result, '1eM', 'один милиард ');
    result := replace( result, '2eM', 'два милиарда ');
    result := replace( result, '3eM', 'три милиарда ');
    result := replace( result, '4eM', 'четыре милиарда ');
    --
    result := replace( result, '11k', '11 копеек');
    result := replace( result, '12k', '12 копеек');
       result := replace( result, '13k', '13 копеек');
    result := replace( result, '14k', '14 копеек');
    result := replace( result, '1k', '1 копейка');
    result := replace( result, '2k', '2 копейки');
    result := replace( result, '3k', '3 копейки');
    result := replace( result, '4k', '4 копейки');
    --
  
    if not (substr(result,1,1)='.') then
    result := replace( result, '.', ' рублeй ');
    else
    result := replace( result, '.', 'ноль рублeй ');
    end if;
    result := replace( result, 't', 'тысяч ');
    result := replace( result, 'm', 'миллионов ');
    result := replace( result, 'M', 'милиардов ');
    result := replace( result, 'k', ' копeeк');
    --
    RETURN(result);
  END;
  $BODY$
    LANGUAGE plpgsql STABLE STRICT
    COST 100;
  ALTER FUNCTION SumInWords(numeric)
    OWNER TO adempiere;
Cookie-файлы помогают нам предоставлять наши услуги. Используя наши сервисы, вы соглашаетесь с использованием cookie-файлов.