На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> ищу процедуру перевода числа в текст (Oracle)
    нужно делать "сумму прописью".

    знаю, что таких процедур уже понаписано навалом.

    киньте ссылку, кто знает
      udf ку напиши ... если сие поддерживается в оракле
        QUOTE (n1919 @ 2.11.03, 19:27)
        нужно делать "сумму прописью".
        знаю, что таких процедур уже понаписано навалом.
        киньте ссылку, кто знает

        Попробуй это cool.gif

        *******************************************

        Попробуй это ---

        -----------------------------------------------------------------
        CREATE OR REPLACE FUNCTION sum2str(v_sum number) RETURN varchar2 IS
        -- Сумма прописью /Maksim F. Sharapov 2003/
        type mass is table of varchar2(13)
        index by binary_integer;
        type rec is record (
        a varchar2(12),
        b varchar2(12),
        c varchar2(12),
        d varchar2(12),
        e varchar2(12),
        k varchar2(12));
        type razr is table of rec
        index by binary_integer;
        m1 mass;
        m1a mass;
        m11 mass;
        m10 mass;
        m100 mass;
        r razr;
        c varchar2(255);
        n number;
        k number;
        i number;
        again boolean;
        BEGIN
        --********************************** Заполняем массивы данными
        m1(0):='';
        m1(1):='один ';
        m1(2):='два ';
        m1(3):='три ';
        m1(4):='четыре ';
        m1(5):='пять ';
        m1(6):='шесть ';
        m1(7):='семь ';
        m1(8):='восемь ';
        m1(9):='девять ';
        --------------------------------
        m1a(0):='';
        m1a(1):='одна ';
        m1a(2):='два ';
        m1a(3):='три ';
        m1a(4):='четыре ';
        m1a(5):='пять ';
        m1a(6):='шесть ';
        m1a(7):='семь ';
        m1a(8):='восемь ';
        m1a(9):='девять ';
        -- от 11 до 19
        m11(0):='';
        m11(1):='одиннадцать ';
        m11(2):='двенадцать ';
        m11(3):='тринадцать ';
        m11(4):='четырнадцать ';
        m11(5):='пятнадцать ';
        m11(6):='шестнадцать ';
        m11(7):='семнадцать ';
        m11(8):='восемнадцать ';
        m11(9):='девятнадцать ';
        -- 2 разряд
        m10(0):='';
        m10(1):='десять ';
        m10(2):='двадцать ';
        m10(3):='тридцать ';
        m10(4):='сорок ';
        m10(5):='пятьдесят ';
        m10(6):='шестьдесят ';
        m10(7):='семьдесят ';
        m10(8):='восемьдесят ';
        m10(9):='девяносто ';
        -- 3 разряд
        m100(0):='';
        m100(1):='сто ';
        m100(2):='двести ';
        m100(3):='триста ';
        m100(4):='четыреста ';
        m100(5):='пятьсот ';
        m100(6):='шестьсот ';
        m100(7):='семьсот ';
        m100(8):='восемьсот ';
        m100(9):='девятьсот ';
        -------------------
        r(0).a:='рублей ';
        r(1).a:='рубль ';
        r(2).a:='рубля ';
        r(3).a:='рубля ';
        r(4).a:='рубля ';
        r(5).a:='рублей ';
        r(6).a:='рублей ';
        r(7).a:='рублей ';
        r(8).a:='рублей ';
        r(9).a:='рублей ';
        -------------------
        r(0).b:='тысяч ';
        r(1).b:='тысяча ';
        r(2).b:='тысячи ';
        r(3).b:='тысячи ';
        r(4).b:='тысячи ';
        r(5).b:='тысяч ';
        r(6).b:='тысяч ';
        r(7).b:='тысяч ';
        r(8).b:='тысяч ';
        r(9).b:='тысяч ';
        -------------------------
        r(0).c:='миллионов ';
        r(1).c:='миллион ';
        r(2).c:='миллиона ';
        r(3).c:='миллиона ';
        r(4).c:='миллиона ';
        r(5).c:='миллионов ';
        r(6).c:='миллионов ';
        r(7).c:='миллионов ';
        r(8).c:='миллионов ';
        r(9).c:='миллионов ';
        ---------------------------
        r(0).d:='миллиардов ';
        r(1).d:='миллиард ';
        r(2).d:='миллиарда ';
        r(3).d:='миллиарда ';
        r(4).d:='милииарда ';
        r(5).d:='миллионов ';
        r(6).d:='миллионов ';
        r(7).d:='миллионов ';
        r(8).d:='миллионов ';
        r(9).d:='миллионов ';
        ------------------------------
        r(0).e:='';
        r(1).e:='';
        r(2).e:='';
        r(3).e:='';
        r(4).e:='';
        r(5).e:='';
        r(6).e:='';
        r(7).e:='';
        r(8).e:='';
        r(9).e:='';
        ---
        r(0).k:='копеек ';
        r(1).k:='копейка ';
        r(2).k:='копейки ';
        r(3).k:='копейки ';
        r(4).k:='копейки ';
        r(5).k:='копеек ';
        r(6).k:='копеек ';
        r(7).k:='копеек ';
        r(8).k:='копеек ';
        r(9).k:='копеек ';
        -- ************************************* Печать копеек
        n:=round(v_sum,2);
        c := substr(to_char(n,'999999999999999999.99'),length(to_char(n,'999999999999999999.99'))-1,2);
        k:=to_number©;
        if mod(k,100)=0 then
        c:='ноль '||r(0).k;
        else
        if mod(k,100)>10 and mod(k,100)<20 then
        c:=r(0).k;
        c:=m11(mod(k,10))||c;
        else
        c:=r(mod(k,10)).k;
        c:=m1a(mod(k,10))||c;
        c:=m10(mod(trunc(k/10,0),10))||c;
        end if;
        end if;
        -- ************************************* Печать суммы **********
        n:=trunc(n,0);
        if n=0 then
        c:='ноль '||r(0).a||c;
        else
        i:=1;
        again:=true;
        while again loop
        if mod(n,100)>10 and mod(n,100)<20 then
        c:=r(0).a||c;
        c:=m11(mod(n,10))||c;
        else
        c:=r(mod(n,10)).a||c;
        if i=2 then
        c:=m1a(mod(n,10))||c;
        else
        c:=m1(mod(n,10))||c;
        end if;
        c:=m10(mod(trunc(n/10,0),10))||c;
        end if;
        c:=m100(mod(trunc(n/100,0),10))||c;
        n:=trunc(n/1000,0);
        if n=0 then
        again:=false;
        end if;
        for j in 0..9 loop
        if i=1 then
        r(j).a:=r(j).b;
        end if;
        if i=2 then
        r(j).a:=r(j).c;
        end if;
        if i=3 then
        r(j).a:=r(j).d;
        end if;
        if mod(n,1000)=0 then
        r(j).a:=r(j).e;
        end if;
        end loop;
        i:=i+1;
        end loop;
        end if;
        return c;
        END;
        ---*******************************************
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0215 ]   [ 15 queries used ]   [ Generated: 27.04.24, 07:26 GMT ]