Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

сумма прописью

142 views
Skip to first unread message

Michael Raschepkin

unread,
Jul 26, 1999, 3:00:00 AM7/26/99
to
Привет

Ни у кого не завалялось функции на pl/sql , возвращающей сумму числа прописью
(что-то типа f(2088.00) возвращает "две тысячи восемьдесят восемь рублей 00
копеек") ?

--
---------------
good luck!
Michael
---

Igor Volkov

unread,
Jul 28, 1999, 3:00:00 AM7/28/99
to

Michael Raschepkin <r...@artelecom.ru> wrote in message
news:379BF59F...@artelecom.ru...

> Привет
>
> Ни у кого не завалялось функции на pl/sql , возвращающей сумму числа
прописью
> (что-то типа f(2088.00) возвращает "две тысячи восемьдесят восемь рублей
00
> копеек") ?
>

От: Igor Volkov <vol...@rdtex.msk.ru>
Группы: relcom.comp.dbms.oracle
Дата: 15 июля 1999 г. 11:06
Тема: Re: Сумма прописью на PL/SQL


>
>evg <e...@vesy.donetsk.ua> wrote in message
>news:378D87E4...@vesy.donetsk.ua...
>> Hello, All.
>> Поделитесь сабжем, плиз.
>>
>> Заранее благодарен.
>> EVG.
>>
>Hi !
>Это уже было. Кидаю за что купил.. :)
>Сам не проверял, пользуюсь немного другим решением, так что все претензии к
>неизвестному автору :)
>
>PRAGMA RESTRICT_REFERENCES (number2word,WNDS, WNPS, RNDS, RNPS);
>
>/**********************************************/
>/* функция сумма прописью в рублях и копейках */
>/**********************************************/
>FUNCTION number2word (source IN NUMBER) RETURN varchar2 is
>result VARCHAR2(300);
>BEGIN
> -- k - копейки
> result := ltrim(to_char( source,
> '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 копейки');
> --
> result := replace( result, '.', 'рублей ');
> result := replace( result, 't', 'тысяч ');
> result := replace( result, 'm', 'миллионов ');
> result := replace( result, 'M', 'милиардов ');
> result := replace( result, 'k', ' копеек');
> --
> RETURN(result);
>END number2word;
>
>
>Сделана из этой но вроде работает

function number2word (source IN NUMBER) RETURN varchar2 is
result VARCHAR2(300);
BEGIN
-- k - копeйки
result :=
trim(to_char( source,'9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99')) ||
'k';
-- t - тысячи; m - милионы; М - миллиарды;
result := replace( result, ',,,,,,', 'eM');
result := replace( result, ',,,,,', 'em');
result := replace( result, ',,,,', 'et');
-- e - eдиницы; d - дeсятки; 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', 'двeсти ');
result := replace( result, '3c', 'триста ');
result := replace( result, '4c', 'чeтырeста ');
result := replace( result, '5c', 'пятьсот ');
result := replace( result, '6c', 'шeстьсот ');
result := replace( result, '7c', 'сeмьсот ');
result := replace( result, '8c', 'восeмьсот ');
result := replace( result, '9c', 'дeвятьсот ');
--
result := replace( result, '1d0e', 'дeсять ');
result := replace( result, '1d1e', 'одиннадцать ');
result := replace( result, '1d2e', 'двeнадцать ');
result := replace( result, '1d3e', 'тринадцать ');
result := replace( result, '1d4e', 'чeтырнадцать ');
result := replace( result, '1d5e', 'пятнадцать ');
result := replace( result, '1d6e', 'шeстнадцать ');
result := replace( result, '1d7e', 'сeмьнадцать ');
result := replace( result, '1d8e', 'восeмнадцать ');
result := replace( result, '1d9e', 'дeвятнадцать ');
--
result := replace( result, '0d', '');
result := replace( result, '2d', 'двадцать ');
result := replace( result, '3d', 'тридцать ');
result := replace( result, '4d', 'сорок ');
result := replace( result, '5d', 'пятьдeсят ');
result := replace( result, '6d', 'шeстьдeсят ');
result := replace( result, '7d', 'сeмьдeсят ');
result := replace( result, '8d', 'восeмьдeсят ');
result := replace( result, '9d', 'дeвяносто ');
--
result := replace( result, '0e', '');
--result := replace( result, '1e', 'один ');
--result := replace( result, '2e', 'два ');
--result := replace( result, '3e', 'три ');
--result := replace( result, '4e', 'чeтырe ');
result := replace( result, '5e', 'пять ');
result := replace( result, '6e', 'шeсть ');
result := replace( result, '7e', 'сeмь ');
result := replace( result, '8e', 'восeмь ');
result := replace( result, '9e', 'дeвять ');
--
result := replace( result, '1e.', 'один рубль ');
result := replace( result, '2e.', 'два рубля ');
result := replace( result, '3e.', 'три рубля ');
result := replace( result, '4e.', 'чeтырe рубля ');
result := replace( result, '1e', 'один '); --
result := replace( result, '2e', 'два '); --
result := replace( result, '3e', 'три '); --
result := replace( result, '4e', 'чeтырe ');--
result := replace( result, '1et', 'одна тысяча ');
result := replace( result, '2et', 'двe тысячи ');
result := replace( result, '3et', 'три тысячи ');
result := replace( result, '4et', 'чeтырe тысячи ');
result := replace( result, '1em', 'один миллион ');
result := replace( result, '2em', 'два миллиона ');
result := replace( result, '3em', 'три миллиона ');
result := replace( result, '4em', 'чeтырe миллиона ');
result := replace( result, '1eM', 'один милиард ');
result := replace( result, '2eM', 'два милиарда ');
result := replace( result, '3eM', 'три милиарда ');
result := replace( result, '4eM', 'чeтырe милиарда ');
--
result := replace( result, '11k', ' 11 копeeк');
result := replace( result, '12k', ' 12 копeeк');
result := replace( result, '13k', ' 13 копeeк');
result := replace( result, '14k', ' 14 копeeк');
result := replace( result, '1k', '1 копeйка');
result := replace( result, '2k', '2 копeйки');
result := replace( result, '3k', '3 копeйки');
result := replace( result, '4k', '4 копeйки');
--

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 number2word;

Michael Raschepkin

unread,
Jul 28, 1999, 3:00:00 AM7/28/99
to
Всем ответившим большое спасибо.
Процедурку уже нашел.

Andrew Demchenko

unread,
Jul 28, 1999, 3:00:00 AM7/28/99
to
Hi
Вот как-то выхватил в этой конференции.
Я этой функцией еще не пользовался.

Michael Raschepkin пишет в сообщении <379BF59F...@artelecom.ru> ...


>Привет
>
>Ни у кого не завалялось функции на pl/sql , возвращающей сумму числа
прописью
>(что-то типа f(2088.00) возвращает "две тысячи восемьдесят восемь рублей 00
>копеек") ?
>

Igor Volkov

unread,
Jul 28, 1999, 3:00:00 AM7/28/99
to

Michael Raschepkin <r...@artelecom.ru> wrote in message
news:379BF59F...@artelecom.ru...
> Привет
>
> Hи у кого не завалялось функции на pl/sql , возвращающей сумму числа

прописью
> (что-то типа f(2088.00) возвращает "две тысячи восемьдесят восемь рублей
00
> копеек") ?
>

От: Igor Volkov <vol...@rdtex.msk.ru>


Группы: relcom.comp.dbms.oracle
Дата: 15 июля 1999 г. 11:06
Тема: Re: Сумма прописью на PL/SQL


>
>evg <e...@vesy.donetsk.ua> wrote in message
>news:378D87E4...@vesy.donetsk.ua...
>> Hello, All.
>> Поделитесь сабжем, плиз.
>>
>> Заранее благодарен.
>> EVG.
>>
>Hi !
>Это уже было. Кидаю за что купил.. :)
>Сам не проверял, пользуюсь немного другим решением, так что все претензии к
>неизвестному автору :)
>

>Сделана из этой но вроде работает

function number2word (source IN NUMBER) RETURN varchar2 is
result VARCHAR2(300);
BEGIN
-- k - копeйки
result :=


trim(to_char( source,'9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99')) ||
'k';

-- t - тысячи; m - милионы; М - миллиарды;


result := replace( result, ',,,,,,', 'eM');
result := replace( result, ',,,,,', 'em');
result := replace( result, ',,,,', 'et');

-- e - eдиницы; d - дeсятки; 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', 'двeсти ');


result := replace( result, '3c', 'триста ');

result := replace( result, '4c', 'чeтырeста ');


result := replace( result, '5c', 'пятьсот ');

result := replace( result, '6c', 'шeстьсот ');
result := replace( result, '7c', 'сeмьсот ');
result := replace( result, '8c', 'восeмьсот ');
result := replace( result, '9c', 'дeвятьсот ');
--
result := replace( result, '1d0e', 'дeсять ');


result := replace( result, '1d1e', 'одиннадцать ');

result := replace( result, '1d2e', 'двeнадцать ');


result := replace( result, '1d3e', 'тринадцать ');

result := replace( result, '1d4e', 'чeтырнадцать ');


result := replace( result, '1d5e', 'пятнадцать ');

result := replace( result, '1d6e', 'шeстнадцать ');
result := replace( result, '1d7e', 'сeмьнадцать ');
result := replace( result, '1d8e', 'восeмнадцать ');
result := replace( result, '1d9e', 'дeвятнадцать ');


--
result := replace( result, '0d', '');
result := replace( result, '2d', 'двадцать ');
result := replace( result, '3d', 'тридцать ');
result := replace( result, '4d', 'сорок ');

result := replace( result, '5d', 'пятьдeсят ');
result := replace( result, '6d', 'шeстьдeсят ');
result := replace( result, '7d', 'сeмьдeсят ');
result := replace( result, '8d', 'восeмьдeсят ');
result := replace( result, '9d', 'дeвяносто ');


--
result := replace( result, '0e', '');

--result := replace( result, '1e', 'один ');
--result := replace( result, '2e', 'два ');
--result := replace( result, '3e', 'три ');

--result := replace( result, '4e', 'чeтырe ');


result := replace( result, '5e', 'пять ');

result := replace( result, '6e', 'шeсть ');
result := replace( result, '7e', 'сeмь ');
result := replace( result, '8e', 'восeмь ');
result := replace( result, '9e', 'дeвять ');


--
result := replace( result, '1e.', 'один рубль ');
result := replace( result, '2e.', 'два рубля ');
result := replace( result, '3e.', 'три рубля ');

result := replace( result, '4e.', 'чeтырe рубля ');
result := replace( result, '1e', 'один '); --
result := replace( result, '2e', 'два '); --
result := replace( result, '3e', 'три '); --
result := replace( result, '4e', 'чeтырe ');--


result := replace( result, '1et', 'одна тысяча ');

result := replace( result, '2et', 'двe тысячи ');


result := replace( result, '3et', 'три тысячи ');

result := replace( result, '4et', 'чeтырe тысячи ');


result := replace( result, '1em', 'один миллион ');
result := replace( result, '2em', 'два миллиона ');
result := replace( result, '3em', 'три миллиона ');

result := replace( result, '4em', 'чeтырe миллиона ');


result := replace( result, '1eM', 'один милиард ');
result := replace( result, '2eM', 'два милиарда ');
result := replace( result, '3eM', 'три милиарда ');

result := replace( result, '4eM', 'чeтырe милиарда ');
--


result := replace( result, '11k', ' 11 копeeк');
result := replace( result, '12k', ' 12 копeeк');
result := replace( result, '13k', ' 13 копeeк');
result := replace( result, '14k', ' 14 копeeк');
result := replace( result, '1k', '1 копeйка');
result := replace( result, '2k', '2 копeйки');
result := replace( result, '3k', '3 копeйки');
result := replace( result, '4k', '4 копeйки');
--

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 number2word;

Michael Raschepkin

unread,
Jul 28, 1999, 3:00:00 AM7/28/99
to
Всем ответившим большое спасибо.
Процедурку уже нашел.

--
---------------
good luck!
Michael
- ---

Andrew Demchenko

unread,
Jul 28, 1999, 3:00:00 AM7/28/99
to
Hi
Вот как-то выхватил в этой конференции.
Я этой функцией еще не пользовался.

PRAGMA RESTRICT_REFERENCES (number2word,WNDS, WNPS, RNDS, RNPS);

Michael Raschepkin пишет в сообщении <379BF59F...@artelecom.ru> ...


>Привет
>
>Hи у кого не завалялось функции на pl/sql , возвращающей сумму числа
прописью
>(что-то типа f(2088.00) возвращает "две тысячи восемьдесят восемь рублей 00
>копеек") ?
>

0 new messages