Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Текст в формате / 10 сообщений из 10, страница 1 из 1
14.10.2005, 09:47
    #33324142
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
В Oracle можно сделать так
Код: plaintext
1.
source in Numeric;
to_char( source,  '9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99');

Можно ли такое сделать в ASA 9.0.2
...
Рейтинг: 0 / 0
14.10.2005, 10:19
    #33324232
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
DIGITALPROВ Oracle можно сделать так
Код: plaintext
1.
source in Numeric;
to_char( source,  '9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99');

Можно ли такое сделать в ASA 9.0.2
То есть я правильно понял - на выходе число преобразуется в строку согласно заданному формату ? В ASA такого нет, функция CONVERT поддерживает форматирование только при работе с датами и временем.

Если нужна функция, форматирующая число с разделителями, то одно из решений для форматирования денег:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE FUNCTION "DBA"."fn_FormatMoney" (
  @Value numeric( 19 ,  2 ),
  @Space char( 1 ) DEFAULT ' ',
  @Div char( 1 ) DEFAULT '.'
)
RETURNS char( 25 )
BEGIN
  DECLARE @Str char( 25 );
  SET @Str = Right(Space( 15 ) || 
    CONVERT(numeric( 15 ,  0 ), Truncnum(Abs(@Value),  0 )),  15 );

  SET @Str =
        LTrim(SubStr(@Str,  1 ,  3 ) || ' ' || SubStr(@Str,  4 ,  3 ) || ' ' ||
              SubStr(@Str,  7 ,  3 ) || ' ' || SubStr(@Str,  10 ,  3 ) || ' ' ||
              SubStr(@Str,  13 ,  3 ));

  IF @Space <> ' '
  THEN
    SET @Str = Replace(@Str, ' ', @Space);
  END IF;

  RETURN (IF @Value <  0  THEN '-' ENDIF) || @Str || @Div || 
    Right(CONVERT(numeric( 19 ,  2 ), Truncnum(@Value,  2 )),  2 );
END;
Пример использования:
Код: plaintext
SELECT fn_FormatMoney( 1234567890 , ' ', ',');
На выходе получим:
1 234 567 890,00

Можно спокойно его доработать до нужной функциональности. А вообще то IMHO лучше такие вещи все таки делать средствами клиентской части и отчетников, не нагружая сервер.
...
Рейтинг: 0 / 0
14.10.2005, 10:32
    #33324278
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
На самом деле это все еще про "СУММА ПРОПИСЬЮ"

Скрипт взят в оракловой ветке на
http://www.sql.ru/forum/actualthread.aspx?tid=22918
...
Рейтинг: 0 / 0
14.10.2005, 10:59
    #33324377
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
DIGITALPRO wrote:

> На самом деле это все еще про "СУММА ПРОПИСЬЮ"
>
> Скрипт взят в оракловой ветке

Может, проще найти нормальное решение, а не пытаться копировать в ASA
Ораклячьи извраты?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14.10.2005, 11:08
    #33324408
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
Dim2000
Может, проще найти нормальное решение, а не пытаться копировать в ASA
Ораклячьи извраты?
Posted via ActualForum NNTP Server 1.3

Подскажите где взять? Буду оч.рад!!!
...
Рейтинг: 0 / 0
14.10.2005, 15:23
    #33325472
vinogradov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
DIGITALPRO Dim2000
Может, проще найти нормальное решение, а не пытаться копировать в ASA
Ораклячьи извраты?
Posted via ActualForum NNTP Server 1.3

Подскажите где взять? Буду оч.рад!!!

Доморощенная, но давно работает
ALTER FUNCTION "rm"."rub_f"(in rub_d numeric(15,2)) /* [IN] parameter_name parameter_type [DEFAULT default_value], ... */
returns varchar(200)
begin
declare rub numeric(10,2);
/* declare W STRING(14),DIM(10,5)*/
declare W11 char(14);declare W12 char(14);declare W13 char(14);declare W14 char(14);declare W15 char(14);
declare W21 char(14);declare W22 char(14);declare W23 char(14);declare W24 char(14);declare W25 char(14);
declare W31 char(14);declare W32 char(14);declare W33 char(14);declare W34 char(14);declare W35 char(14);
declare W41 char(14);declare W42 char(14);declare W43 char(14);declare W44 char(14);declare W45 char(14);
declare W51 char(14);declare W52 char(14);declare W53 char(14);declare W54 char(14);declare W55 char(14);
declare W61 char(14);declare W62 char(14);declare W63 char(14);declare W64 char(14);declare W65 char(14);
declare W71 char(14);declare W72 char(14);declare W73 char(14);declare W74 char(14);declare W75 char(14);
declare W81 char(14);declare W82 char(14);declare W83 char(14);declare W84 char(14);declare W85 char(14);
declare W91 char(14);declare W92 char(14);declare W93 char(14);declare W94 char(14);declare W95 char(14);
declare W101 char(14);declare W102 char(14);declare W103 char(14);declare W104 char(14);declare W105 char(14);
declare m integer;
declare k integer;
declare VVOD char(12);
declare LVVOD decimal(14);
declare Rvvod real;
declare kop decimal(2);
declare rubl char(7);
declare thou char(7);
declare mil char(11);
declare mlrd char(11);
declare sym char(1);
declare Isym integer;
declare pos char(1);
declare alf char(8);
declare upp char(8);
declare pr char(195);
declare pr1 char(195);
declare num char(10);
/* declare pr_chr STRING(1),DIM(195),OVER(pr)*/
set alf='швподчст';
set upp='ШВПОДЧСТ';
set num='0123456789';
set W11='0';
set W12='';
set W13='десять ';
set W14='';
set W15='';
set W21='1';
set W22='один ';
set W23='одиннадцать ';
set W24=' ';
set W25='сто ';
set W31='2';
set W32='два ';
set W33='двенадцать ';
set W34='двадцать ';
set W35='двести ';
set W41='3';
set W42='три ';
set W43='тринадцать ';
set W44='тридцать ';
set W45='триста ';
set W51='4';
set W52='четыре ';
set W53='четырнадцать ';
set W54='сорок ';
set W55='четыреста ';
set W61='5';
set W62='пять ';
set W63='пятнадцать ';
set W64='пятьдесят ';
set W65='пятьсот ';
set W71='6';
set W72='шесть ';
set W73='шестнадцать ';
set W74='шестьдесят ';
set W75='шестьсот ';
set W81='7';
set W82='семь ';
set W83='семнадцать ';
set W84='семьдесят ';
set W85='семьсот ';
set W91='8';
set W92='восемь ';
set W93='восемнадцать ';
set W94='восемьдесят ';
set W95='восемьсот ';
set W101='9';
set W102='девять ';
set W103='девятнадцать ';
set W104='девяносто ';
set W105='девятьсот ';
set LVVOD=FLOOR(rub_d);
set KOP=(rub_d-LVVOD)*100;
set VVOD=LVVOD;
set VVOD=REPLICATE(' ',12-LENGTH(VVOD))+VVOD;
--return(VVOD);
set m=1;
while m <= 12 loop
set sym=SUBSTRING(vvod,-m,-1);
if sym <> ' ' then
set Isym=CHARINDEX(sym,num);
case m
when 1 then
if Isym = 2 then
set rubl=' рубль '
elseif Isym = 3 or Isym = 4 or Isym = 5 then
set rubl=' рубля'
else
set rubl=' рублей'
end if;
if SUBSTRING(vvod,-2,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' рублей '
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+rubl
end if
when 2 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 3 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
when 4 then
if SUBSTRING(vvod,-5,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' тысяч '+pr
else
if sym = '1' then
set pr='одна тысяча '+pr
elseif sym = '2' then
set pr='две тысячи '+pr
elseif sym = '3' or sym = '4' then
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+' тысячи '+pr
else
if SUBSTRING(vvod,-4,-1) = '0' and SUBSTRING(vvod,-5,-1) = '0' and SUBSTRING(vvod,-6,-1) = '0' then
set pr=pr
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+' тысяч '+pr
end if
end if
end if
when 5 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 6 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
when 7 then
if sym = '1' then
set mil=' миллион '
elseif sym = '2' or sym = '3' or sym = '4' then
set mil=' миллиона '
else
set mil=' миллионов '
end if;
if SUBSTRING(vvod,-8,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' миллионов '+pr
else
if SUBSTRING(vvod,-7,-1) = '0' and SUBSTRING(vvod,-8,-1) = '0' and SUBSTRING(vvod,-9,1) = '0' then
set pr=pr
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+mil+' '+pr
end if
end if
when 8 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 9 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
when 10 then
if sym = '1' then
set mlrd=' миллиард '
elseif sym = '2' or sym = '3' or sym = '4' then
set mlrd=' миллиарда  '
else
set mlrd=' миллиардов '
end if;
if SUBSTRING(vvod,-11,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' миллиардов '+pr
else
if SUBSTRING(vvod,-10,-1) = '0' and SUBSTRING(vvod,-11,-1) = '0' and SUBSTRING(vvod,-12,-1) = '0' then
set pr=pr
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+mlrd+' '+pr
end if
end if
when 11 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 12 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
end case
end if;
set m=m+1
end loop;
--*/
set pos=CHARINDEX(SUBstring(pr,1,1),alf); -- с заглавной буквы
set pos=SUBstring(upp,pos,1);
set pr=pos+substring(pr,2,150);
if lvvod = 0 then
set pr='Ноль рублей'
end if;
return(pr+' '+(if LENGTH(KOP) > 1 then string(KOP)
else '0'+string(KOP)
endif)+' коп.') end
...
Рейтинг: 0 / 0
14.10.2005, 15:38
    #33325548
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
И все же сделал как в оракловой ветке

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
CREATE FUNCTION "ADS"."F_NumToStr"

(
IN source Numeric( 15 , 2 )
)

RETURNS char( 500 )
DETERMINISTIC

BEGIN
DECLARE Resultat char( 500 );
DECLARE sSumFormat Char( 500 );
DECLARE nLen Integer;
DECLARE ni Integer;
DECLARE ni2 Integer;

SET sSumFormat = Cast(Floor(Abs(source)) as Char( 500 ));
SET nLen = LENGTH(sSumFormat);

-- Приводим к формату
-- '9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99'

SET ni =  1 ;
SET ni2 =  3 ;
WHILE nLen >= ni LOOP
    IF ni in ( 1 , 4 , 7 , 10 ) THEN
        SET Resultat = SubStr(sSumFormat, nLen - ni + 1  ,  1 ) || REPEAT( ',', ni2 ) || Resultat;
        SET ni2 = ni2 + 1 ;
    END IF;
    IF ni in ( 2 , 5 , 8 , 11 ) THEN SET Resultat = SubStr(sSumFormat, nLen - ni + 1  ,  1 ) || ',,'  || Resultat END IF;
    IF ni in ( 3 , 6 , 9 , 12 ) THEN SET Resultat = SubStr(sSumFormat, nLen - ni + 1 ,  1 ) || ',' || Resultat END IF;

    SET ni = ni +  1 ;
END LOOP;

-- k - копейки
SET Resultat = Resultat || '.' || Right(CONVERT(numeric( 19 ,  2 ), Truncnum(source,  2 )),  2 ) || 'k';

-- t - тысячи; m - милионы; M - миллиарды;
SET Resultat = replace( Resultat, ',,,,,,', 'eM');
SET Resultat = replace( Resultat, ',,,,,', 'em');
SET Resultat = replace( Resultat, ',,,,', 'et');
-- e - единицы; d - десятки; c - сотни;
SET Resultat = replace( Resultat, ',,,', 'e');
SET Resultat = replace( Resultat, ',,', 'd');
SET Resultat = replace( Resultat, ',', 'c');
--
SET Resultat = replace( Resultat, '0c0d0et', '');
SET Resultat = replace( Resultat, '0c0d0em', '');
SET Resultat = replace( Resultat, '0c0d0eM', '');
--
SET Resultat = replace( Resultat, '0c', '');
SET Resultat = replace( Resultat, '1c', 'сто ');
SET Resultat = replace( Resultat, '2c', 'двести ');
SET Resultat = replace( Resultat, '3c', 'триста ');
SET Resultat = replace( Resultat, '4c', 'четыреста ');
SET Resultat = replace( Resultat, '5c', 'пятьсот ');
SET Resultat = replace( Resultat, '6c', 'шестьсот ');
SET Resultat = replace( Resultat, '7c', 'семьсот ');
SET Resultat = replace( Resultat, '8c', 'восемьсот ');
SET Resultat = replace( Resultat, '9c', 'девятьсот ');
--
SET Resultat = replace( Resultat, '1d0e', 'десять ');
SET Resultat = replace( Resultat, '1d1e', 'одиннадцать ');
SET Resultat = replace( Resultat, '1d2e', 'двенадцать ');
SET Resultat = replace( Resultat, '1d3e', 'тринадцать ');
SET Resultat = replace( Resultat, '1d4e', 'четырнадцать ');
SET Resultat = replace( Resultat, '1d5e', 'пятнадцать ');
SET Resultat = replace( Resultat, '1d6e', 'шестнадцать ');
SET Resultat = replace( Resultat, '1d7e', 'семьнадцать ');
SET Resultat = replace( Resultat, '1d8e', 'восемнадцать ');
SET Resultat = replace( Resultat, '1d9e', 'девятнадцать ');
--
SET Resultat = replace( Resultat, '0d', '');
SET Resultat = replace( Resultat, '2d', 'двадцать ');
SET Resultat = replace( Resultat, '3d', 'тридцать ');
SET Resultat = replace( Resultat, '4d', 'сорок ');
SET Resultat = replace( Resultat, '5d', 'пятьдесят ');
SET Resultat = replace( Resultat, '6d', 'шестьдесят ');
SET Resultat = replace( Resultat, '7d', 'семьдесят ');
SET Resultat = replace( Resultat, '8d', 'восемьдесят ');
SET Resultat = replace( Resultat, '9d', 'девяносто ');
--
SET Resultat = replace( Resultat, '0e', '');
SET Resultat = replace( Resultat, '5e', 'пять ');
SET Resultat = replace( Resultat, '6e', 'шесть ');
SET Resultat = replace( Resultat, '7e', 'семь ');
SET Resultat = replace( Resultat, '8e', 'восемь ');
SET Resultat = replace( Resultat, '9e', 'девять ');
--
SET Resultat = replace( Resultat, '1e.', 'один рубль ');
SET Resultat = replace( Resultat, '2e.', 'два рубля ');
SET Resultat = replace( Resultat, '3e.', 'три рубля ');
SET Resultat = replace( Resultat, '4e.', 'четыре рубля ');
SET Resultat = replace( Resultat, '1et', 'одна тысяча ');
SET Resultat = replace( Resultat, '2et', 'две тысячи ');
SET Resultat = replace( Resultat, '3et', 'три тысячи ');
SET Resultat = replace( Resultat, '4et', 'четыре тысячи ');
SET Resultat = replace( Resultat, '1em', 'один миллион ');
SET Resultat = replace( Resultat, '2em', 'два миллиона ');
SET Resultat = replace( Resultat, '3em', 'три миллиона ');
SET Resultat = replace( Resultat, '4em', 'четыре миллиона ');
SET Resultat = replace( Resultat, '1eM', 'один милиард ');
SET Resultat = replace( Resultat, '2eM', 'два милиарда ');
SET Resultat = replace( Resultat, '3eM', 'три милиарда ');
SET Resultat = replace( Resultat, '4eM', 'четыре милиарда ');
--
SET Resultat = replace( Resultat, '11k', '11 копеек');
SET Resultat = replace( Resultat, '12k', '12 копеек');
SET Resultat = replace( Resultat, '13k', '13 копеек');
SET Resultat = replace( Resultat, '14k', '14 копеек');
SET Resultat = replace( Resultat, '1k', '1 копейка');
SET Resultat = replace( Resultat, '2k', '2 копейки');
SET Resultat = replace( Resultat, '3k', '3 копейки');
SET Resultat = replace( Resultat, '4k', '4 копейки');
--
IF Not (substr(Resultat, 1 , 1 )='.') THEN
    SET Resultat = replace( Resultat, '.', ' рублeй ');
ELSE
    SET Resultat = replace( Resultat, '.', 'ноль рублeй ');
END IF;
--
SET Resultat = replace( Resultat, 't', 'тысяч ');
SET Resultat = replace( Resultat, 'm', 'миллионов ');
SET Resultat = replace( Resultat, 'M', 'милиардов ');
SET Resultat = replace( Resultat, 'k', ' копeeк');
--
-- Первая буква д/б большая
SET Resultat = Upper(Left(Resultat,  1 )) || Right(Resultat, Length(Resultat)- 1 ); 

RETURN Resultat;

END;
...
Рейтинг: 0 / 0
14.10.2005, 15:40
    #33325562
Рыжий Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
наверное это лучше положить в Фак
...
Рейтинг: 0 / 0
14.10.2005, 15:44
    #33325579
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
Я только за!

===============================
PB 9.0.2 (7534) ASA 9.0.2 (2451)
...
Рейтинг: 0 / 0
14.10.2005, 19:40
    #33326100
vinogradov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текст в формате
DIGITALPRO Dim2000
Может, проще найти нормальное решение, а не пытаться копировать в ASA
Ораклячьи извраты?
Posted via ActualForum NNTP Server 1.3

Подскажите где взять? Буду оч.рад!!!

Доморощенная, но давно работает
ALTER FUNCTION "rm"."rub_f"(in rub_d numeric(15,2)) /* [IN] parameter_name parameter_type [DEFAULT default_value], ... */
returns varchar(200)
begin
declare rub numeric(10,2);
/* declare W STRING(14),DIM(10,5)*/
declare W11 char(14);declare W12 char(14);declare W13 char(14);declare W14 char(14);declare W15 char(14);
declare W21 char(14);declare W22 char(14);declare W23 char(14);declare W24 char(14);declare W25 char(14);
declare W31 char(14);declare W32 char(14);declare W33 char(14);declare W34 char(14);declare W35 char(14);
declare W41 char(14);declare W42 char(14);declare W43 char(14);declare W44 char(14);declare W45 char(14);
declare W51 char(14);declare W52 char(14);declare W53 char(14);declare W54 char(14);declare W55 char(14);
declare W61 char(14);declare W62 char(14);declare W63 char(14);declare W64 char(14);declare W65 char(14);
declare W71 char(14);declare W72 char(14);declare W73 char(14);declare W74 char(14);declare W75 char(14);
declare W81 char(14);declare W82 char(14);declare W83 char(14);declare W84 char(14);declare W85 char(14);
declare W91 char(14);declare W92 char(14);declare W93 char(14);declare W94 char(14);declare W95 char(14);
declare W101 char(14);declare W102 char(14);declare W103 char(14);declare W104 char(14);declare W105 char(14);
declare m integer;
declare k integer;
declare VVOD char(12);
declare LVVOD decimal(14);
declare Rvvod real;
declare kop decimal(2);
declare rubl char(7);
declare thou char(7);
declare mil char(11);
declare mlrd char(11);
declare sym char(1);
declare Isym integer;
declare pos char(1);
declare alf char(8);
declare upp char(8);
declare pr char(195);
declare pr1 char(195);
declare num char(10);
/* declare pr_chr STRING(1),DIM(195),OVER(pr)*/
set alf='швподчст';
set upp='ШВПОДЧСТ';
set num='0123456789';
set W11='0';
set W12='';
set W13='десять ';
set W14='';
set W15='';
set W21='1';
set W22='один ';
set W23='одиннадцать ';
set W24=' ';
set W25='сто ';
set W31='2';
set W32='два ';
set W33='двенадцать ';
set W34='двадцать ';
set W35='двести ';
set W41='3';
set W42='три ';
set W43='тринадцать ';
set W44='тридцать ';
set W45='триста ';
set W51='4';
set W52='четыре ';
set W53='четырнадцать ';
set W54='сорок ';
set W55='четыреста ';
set W61='5';
set W62='пять ';
set W63='пятнадцать ';
set W64='пятьдесят ';
set W65='пятьсот ';
set W71='6';
set W72='шесть ';
set W73='шестнадцать ';
set W74='шестьдесят ';
set W75='шестьсот ';
set W81='7';
set W82='семь ';
set W83='семнадцать ';
set W84='семьдесят ';
set W85='семьсот ';
set W91='8';
set W92='восемь ';
set W93='восемнадцать ';
set W94='восемьдесят ';
set W95='восемьсот ';
set W101='9';
set W102='девять ';
set W103='девятнадцать ';
set W104='девяносто ';
set W105='девятьсот ';
set LVVOD=FLOOR(rub_d);
set KOP=(rub_d-LVVOD)*100;
set VVOD=LVVOD;
set VVOD=REPLICATE(' ',12-LENGTH(VVOD))+VVOD;
--return(VVOD);
set m=1;
while m <= 12 loop
set sym=SUBSTRING(vvod,-m,-1);
if sym <> ' ' then
set Isym=CHARINDEX(sym,num);
case m
when 1 then
if Isym = 2 then
set rubl=' рубль '
elseif Isym = 3 or Isym = 4 or Isym = 5 then
set rubl=' рубля'
else
set rubl=' рублей'
end if;
if SUBSTRING(vvod,-2,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' рублей '
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+rubl
end if
when 2 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 3 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
when 4 then
if SUBSTRING(vvod,-5,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' тысяч '+pr
else
if sym = '1' then
set pr='одна тысяча '+pr
elseif sym = '2' then
set pr='две тысячи '+pr
elseif sym = '3' or sym = '4' then
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+' тысячи '+pr
else
if SUBSTRING(vvod,-4,-1) = '0' and SUBSTRING(vvod,-5,-1) = '0' and SUBSTRING(vvod,-6,-1) = '0' then
set pr=pr
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+' тысяч '+pr
end if
end if
end if
when 5 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 6 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
when 7 then
if sym = '1' then
set mil=' миллион '
elseif sym = '2' or sym = '3' or sym = '4' then
set mil=' миллиона '
else
set mil=' миллионов '
end if;
if SUBSTRING(vvod,-8,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' миллионов '+pr
else
if SUBSTRING(vvod,-7,-1) = '0' and SUBSTRING(vvod,-8,-1) = '0' and SUBSTRING(vvod,-9,1) = '0' then
set pr=pr
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+mil+' '+pr
end if
end if
when 8 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 9 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
when 10 then
if sym = '1' then
set mlrd=' миллиард '
elseif sym = '2' or sym = '3' or sym = '4' then
set mlrd=' миллиарда  '
else
set mlrd=' миллиардов '
end if;
if SUBSTRING(vvod,-11,-1) = '1' then
case Isym when 1 then set pr1=w13 when 2 then set pr1=w23 when 3 then set pr1=w33 when 4 then set pr1=w43 when 5 then set pr1=w53 when 6 then set pr1=w63 when 7 then set pr1=w73 when 8 then set pr1=w83 when 9 then set pr1=w93 when 10 then set pr1=w103
end case
;
set pr=pr1+' миллиардов '+pr
else
if SUBSTRING(vvod,-10,-1) = '0' and SUBSTRING(vvod,-11,-1) = '0' and SUBSTRING(vvod,-12,-1) = '0' then
set pr=pr
else
case Isym when 1 then set pr1=w12 when 2 then set pr1=w22 when 3 then set pr1=w32 when 4 then set pr1=w42 when 5 then set pr1=w52 when 6 then set pr1=w62 when 7 then set pr1=w72 when 8 then set pr1=w82 when 9 then set pr1=w92 when 10 then set pr1=w102
end case
;
set pr=pr1+mlrd+' '+pr
end if
end if
when 11 then
if sym <> '1' then
case Isym when 1 then set pr1=w14 when 2 then set pr1=w24 when 3 then set pr1=w34 when 4 then set pr1=w44 when 5 then set pr1=w54 when 6 then set pr1=w64 when 7 then set pr1=w74 when 8 then set pr1=w84 when 9 then set pr1=w94 when 10 then set pr1=w104
end case
;
set pr=pr1+' '+pr
end if
when 12 then
case Isym when 1 then set pr1=w15 when 2 then set pr1=w25 when 3 then set pr1=w35 when 4 then set pr1=w45 when 5 then set pr1=w55 when 6 then set pr1=w65 when 7 then set pr1=w75 when 8 then set pr1=w85 when 9 then set pr1=w95 when 10 then set pr1=w105
end case
;
set pr=pr1+' '+pr
end case
end if;
set m=m+1
end loop;
--*/
set pos=CHARINDEX(SUBstring(pr,1,1),alf); -- с заглавной буквы
set pos=SUBstring(upp,pos,1);
set pr=pos+substring(pr,2,150);
if lvvod = 0 then
set pr='Ноль рублей'
end if;
return(pr+' '+(if LENGTH(KOP) > 1 then string(KOP)
else '0'+string(KOP)
endif)+' коп.') end
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Текст в формате / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]