powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / число прописью
14 сообщений из 14, страница 1 из 1
число прописью
    #36380997
Код: 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.
with
a as (select  914767000873534524591281095 . 29663057631  num from dual),
nums as (
select  1  num, ' один' num_m, ' одна' num_f, ' одно' num_i, ' одиннадцать' teen, ' десять' ten, ' сто' hundr from dual
union all
select  2 , ' два', ' две', ' два', ' двенадцать', ' двадцать', ' двести' from dual
union all
select  3 , ' три', ' три', ' три', ' тринадцать', ' тридцать', ' триста' from dual
union all
select  4 , ' четыре', ' четыре', ' четыре', ' четырнадцать', ' сорок', ' четыреста' from dual
union all
select  5 , ' пять', ' пять', ' пять', ' пятьнадцать', ' пятьдесят', ' пятьсот' from dual
union all
select  6 , ' шесть', ' шесть', ' шесть', ' шестьнадцать', ' шестьдесят', ' шестьсот' from dual
union all
select  7 , ' семь', ' семь', ' семь', ' семнадцать', ' семьдесят', ' семьсот' from dual
union all
select  8 , ' восемь', ' восемь', ' восемь', ' восемьнадцать', ' восемьдесят', ' восемьсот' from dual
union all
select  9 , ' девять', ' девять', ' девять', ' девятнадцать', ' девяносто', ' девятьсот' from dual
),
pows as (
select  1  num, ' тысяча' power1, ' тысячи' power2, ' тысяч' power5, 'тысячная' power_1, 'тысячных' power_2 from dual
union all
select  2 , ' миллион', ' миллиона', ' миллионов', 'миллионная', 'миллионных' from dual
union all
select  3 , ' миллиард', ' миллиарда', ' миллиардов', 'миллиардная', 'миллиардных' from dual
union all
select  4 , ' триллион', ' триллиона', ' триллионов', 'триллионная', 'триллионных' from dual
union all
select  5 , ' квадриллион', ' квадриллиона', ' квадриллионов', 'квадриллионная', 'квадриллионных' from dual
union all
select  6 , ' квинтиллион', ' квинтиллиона', ' квинтиллионов', 'квинтиллионная', 'квинтиллионных' from dual
union all
select  7 , ' секстиллион', ' секстиллиона', ' секстиллионов', 'секстиллионная', 'секстиллионных' from dual
union all
select  8 , ' септиллион', ' септиллиона', ' септиллионов', 'септиллионная', 'септиллионных' from dual
union all
select  9 , ' октиллион', ' октиллиона', ' октиллионов', 'октиллионная', 'октиллионных' from dual
union all
select  10 , ' нониллион', ' нониллиона', ' нониллионов', 'нониллионная', 'нониллионных' from dual
union all
select  11 , ' дециллион', ' дециллиона', ' дециллионов', 'дециллионная', 'децилионных' from dual
),
b as (select floor(num) part1, to_number(substr(to_char(num-floor(num)), 2 )) part2, length(substr(to_char(num-floor(num)), 2 )) part2_len from a),
c as (
  select
    1  part,
   level- 1  lvl,
   case when level- 1 = 0  then 'Ы' when level- 1 = 1  then 'F' else 'M' end s,
   mod(floor(part1/power( 1000 ,level- 1 )), 1000 ) trinum
  from b connect by level<= 11 
  union all
  select
    2  part,
   level- 1  lvl,
   case when level- 1 = 0  then 'F' when level- 1 = 1  then 'F' else 'M' end s,
   mod(floor(part2/power( 1000 ,level- 1 )), 1000 ) trinum
  from b connect by level<= 11 
),
d as (
select part, lvl, s, trinum,
  case when trinum= 0  then  0 
       when mod(trinum, 100 ) between  5  and  19  then  5 
       when mod(trinum, 10 ) between  2  and  4  then  2 
       when mod(trinum, 10 )= 1  then  1 
       else  5 
  end power
from c),
e as (
select
  row_number() over (order by d.part, d.lvl desc) rn
, h.hundr
  || case when t.num= 1  and n.num> 0  then n.teen else t.ten 
  || decode(d.s,'M',n.num_m,'F',n.num_f,n.num_i) end 
  || decode(d.power, 1 ,p.power1, 2 ,p.power2, 5 ,p.power5)
  || case when d.part= 1  and d.lvl= 0  then
     (select ' ' || decode(d.power, 1 ,decode(d.s,'M','целый','F','целая','целое'), 2 ,'целых', 5 ,'целых')
      from b where b.part2_len> 0 )
     end
  || case when d.part= 2  and d.lvl= 0  then
     (select ' ' ||
       case b.part2_len
        when  1  then decode(d.power, 1 ,'десятая', 2 ,'десятых', 5 ,'десятых')
        when  2  then decode(d.power, 1 ,'сотая', 2 ,'сотых', 5 ,'сотых')
        else decode(mod(b.part2_len, 3 ), 1 ,'десяти', 2 ,'сто') || decode(d.power, 1 ,m.power_1, 2 ,m.power_2, 5 ,m.power_2)
       end 
      from b
       left join pows m on m.num=floor(b.part2_len/ 3 ))
     end text
from d
  left join nums h on h.num=floor(d.trinum/ 100 )
  left join nums t on t.num=mod(floor(d.trinum/ 10 ), 10 )
  left join nums n on n.num=mod(d.trinum, 10 )
  left join pows p on p.num=d.lvl)

select sys_xmlagg(xmlelement(col,text)).extract('ROWSET/COL/text()').getstringval() s
from e order by rn
...
Рейтинг: 0 / 0
число прописью
    #36381004
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про Йобибайт то забыли!
...
Рейтинг: 0 / 0
число прописью
    #36381008
mcureenab,

спасибо, я учту =)
...
Рейтинг: 0 / 0
число прописью
    #36381075
Код: 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.
with
a as (select  914760000873534524591281093 . 29663057635  num from dual),
nums as (
select  1  num, ' один' num_m, ' одна' num_f, ' одно' num_i, ' одиннадцать' teen, ' десять' ten, ' сто' hundr from dual
union all
select  2 , ' два', ' две', ' два', ' двенадцать', ' двадцать', ' двести' from dual
union all
select  3 , ' три', ' три', ' три', ' тринадцать', ' тридцать', ' триста' from dual
union all
select  4 , ' четыре', ' четыре', ' четыре', ' четырнадцать', ' сорок', ' четыреста' from dual
union all
select  5 , ' пять', ' пять', ' пять', ' пятьнадцать', ' пятьдесят', ' пятьсот' from dual
union all
select  6 , ' шесть', ' шесть', ' шесть', ' шестьнадцать', ' шестьдесят', ' шестьсот' from dual
union all
select  7 , ' семь', ' семь', ' семь', ' семнадцать', ' семьдесят', ' семьсот' from dual
union all
select  8 , ' восемь', ' восемь', ' восемь', ' восемьнадцать', ' восемьдесят', ' восемьсот' from dual
union all
select  9 , ' девять', ' девять', ' девять', ' девятнадцать', ' девяносто', ' девятьсот' from dual
),
pows as (
select  1  num, ' тысяча' power1, ' тысячи' power2, ' тысяч' power5, 'тысячная' power_1, 'тысячных' power_2 from dual
union all
select  2 , ' миллион', ' миллиона', ' миллионов', 'миллионная', 'миллионных' from dual
union all
select  3 , ' миллиард', ' миллиарда', ' миллиардов', 'миллиардная', 'миллиардных' from dual
union all
select  4 , ' триллион', ' триллиона', ' триллионов', 'триллионная', 'триллионных' from dual
union all
select  5 , ' квадриллион', ' квадриллиона', ' квадриллионов', 'квадриллионная', 'квадриллионных' from dual
union all
select  6 , ' квинтиллион', ' квинтиллиона', ' квинтиллионов', 'квинтиллионная', 'квинтиллионных' from dual
union all
select  7 , ' секстиллион', ' секстиллиона', ' секстиллионов', 'секстиллионная', 'секстиллионных' from dual
union all
select  8 , ' септиллион', ' септиллиона', ' септиллионов', 'септиллионная', 'септиллионных' from dual
union all
select  9 , ' октиллион', ' октиллиона', ' октиллионов', 'октиллионная', 'октиллионных' from dual
union all
select  10 , ' нониллион', ' нониллиона', ' нониллионов', 'нониллионная', 'нониллионных' from dual
union all
select  11 , ' дециллион', ' дециллиона', ' дециллионов', 'дециллионная', 'децилионных' from dual
),
sfx as (
select  1  num, 'целый' part1_m, 'целая' part1_f, 'целое' part1_i, 'десятая' part2_1, 'сотая' part2_2, 'десяти' part2_pow from dual
union all
select  2 , 'целых', 'целых', 'целых', 'десятых', 'сотых', 'сто' from dual
union all
select  5 , 'целых', 'целых', 'целых', 'десятых', 'сотых', '' from dual
),
b as (select floor(num) part1, to_number(substr(to_char(num-floor(num)), 2 )) part2, length(substr(to_char(num-floor(num)), 2 )) part2_len from a),
c as (
  select
    1  part,
   level- 1  lvl,
   case when level- 1 = 0  then 'Ы' when level- 1 = 1  then 'F' else 'M' end s,
   mod(floor(part1/power( 1000 ,level- 1 )), 1000 ) trinum
  from b connect by level<= 11 
  union all
  select
    2  part,
   level- 1  lvl,
   case when level- 1 = 0  then 'F' when level- 1 = 1  then 'F' else 'M' end s,
   mod(floor(part2/power( 1000 ,level- 1 )), 1000 ) trinum
  from b connect by level<= 11 
),
d as (
select part, lvl, s, trinum,
  case when trinum= 0  then  0 
       when mod(trinum, 100 ) between  5  and  19  then  5 
       when mod(trinum, 10 ) between  2  and  4  then  2 
       when mod(trinum, 10 )= 1  then  1 
       else  5 
  end power
from c),
e as (
select
  row_number() over (order by d.part, d.lvl desc) rn
, h.hundr
  || case when t.num= 1  and n.num> 0  then n.teen else t.ten 
  || decode(d.s,'M',n.num_m,'F',n.num_f,n.num_i) end 
  || decode(d.power, 1 ,p.power1, 2 ,p.power2, 5 ,p.power5)
  || case when d.part= 1  and d.lvl= 0  then
     (select ' ' || decode(d.s,'M',s.part1_m,'F',s.part1_f,s.part1_i)
      from b, sfx s
      where s.num(+)=d.power and b.part2_len> 0 )
     end
  || case when d.part= 2  and d.lvl= 0  then
     (select ' ' ||
       decode(b.part2_len, 1 ,s1.part2_1, 2 ,s1.part2_2,s2.part2_pow||decode(d.power, 1 ,p.power_1, 2 ,p.power_2, 5 ,p.power_2))
      from b, pows p, sfx s1, sfx s2
      where p.num(+)=floor(b.part2_len/ 3 ) and s1.num(+)=d.power and s2.num(+)=mod(b.part2_len, 3 ))
     end text
from d, nums h, nums t, nums n, pows p
where h.num(+)=floor(d.trinum/ 100 )
  and t.num(+)=mod(floor(d.trinum/ 10 ), 10 )
  and n.num(+)=mod(d.trinum, 10 )
  and p.num(+)=d.lvl)

select sys_xmlagg(xmlelement(col,text)).extract('ROWSET/COL/text()').getstringval() text
from e order by rn
...
Рейтинг: 0 / 0
число прописью
    #36381516
А по проще
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
with
a as (select  1  num from dual),
nums as (
...
Код: plaintext
 одно нониллионов октиллионов септиллионов секстиллионов квинтиллионов квадриллионов триллионов миллиардов миллионов тысяч
...
Рейтинг: 0 / 0
число прописью
    #36382009
А по проще,

спасибо большое. стратил таки на преобразовании в строку :(
Код: plaintext
b as (select floor(num) part1, nvl(to_number(substr(to_char(num-floor(num)), 2 )), 0 ) part2, length(substr(to_char(num-floor(num)), 2 )) part2_len from a)
...
Рейтинг: 0 / 0
число прописью
    #36382049
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще см. stff числа прописью
...
Рейтинг: 0 / 0
число прописью
    #36382654
orawish,

спасибо, я видел :)

последний вариант, исправлен ещё и 0

Код: 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.
with
a as (select  0  num, 'I' sex from dual),
b as (select sex, floor(num) part1, nvl(to_number(substr(to_char(num-floor(num)), 2 )), 0 ) part2, length(substr(to_char(num-floor(num)), 2 )) part2_len from a),
c as (
  select
    1  part,
   level- 1  lvl,
   case when level- 1 = 0  then sex when level- 1 = 1  then 'F' else 'M' end s,
   mod(floor(part1/power( 1000 ,level- 1 )), 1000 ) trinum
  from b connect by level<= 11 
  union all
  select
    2  part,
   level- 1  lvl,
   case when level- 1 = 0  then 'F' when level- 1 = 1  then 'F' else 'M' end s,
   mod(floor(part2/power( 1000 ,level- 1 )), 1000 ) trinum
  from b connect by level<= 11 ),
d as (
select part, lvl, s, trinum,
  case when trinum= 0  then  0 
       when mod(trinum, 100 ) between  5  and  19  then  5 
       when mod(trinum, 10 ) between  2  and  4  then  2 
       when mod(trinum, 10 )= 1  then  1 
       else  5 
  end power
from c),
nums as (
select  1  num, ' один' num_m, ' одна' num_f, ' одно' num_i, ' одиннадцать' teen, ' десять' ten, ' сто' hundr from dual
union all
select  2 , ' два', ' две', ' два', ' двенадцать', ' двадцать', ' двести' from dual
union all
select  3 , ' три', ' три', ' три', ' тринадцать', ' тридцать', ' триста' from dual
union all
select  4 , ' четыре', ' четыре', ' четыре', ' четырнадцать', ' сорок', ' четыреста' from dual
union all
select  5 , ' пять', ' пять', ' пять', ' пятьнадцать', ' пятьдесят', ' пятьсот' from dual
union all
select  6 , ' шесть', ' шесть', ' шесть', ' шестьнадцать', ' шестьдесят', ' шестьсот' from dual
union all
select  7 , ' семь', ' семь', ' семь', ' семнадцать', ' семьдесят', ' семьсот' from dual
union all
select  8 , ' восемь', ' восемь', ' восемь', ' восемьнадцать', ' восемьдесят', ' восемьсот' from dual
union all
select  9 , ' девять', ' девять', ' девять', ' девятнадцать', ' девяносто', ' девятьсот' from dual
),
pows as (
select  1  num, ' тысяча' power1, ' тысячи' power2, ' тысяч' power5, 'тысячная' power_1, 'тысячных' power_2 from dual
union all
select  2 , ' миллион', ' миллиона', ' миллионов', 'миллионная', 'миллионных' from dual
union all
select  3 , ' миллиард', ' миллиарда', ' миллиардов', 'миллиардная', 'миллиардных' from dual
union all
select  4 , ' триллион', ' триллиона', ' триллионов', 'триллионная', 'триллионных' from dual
union all
select  5 , ' квадриллион', ' квадриллиона', ' квадриллионов', 'квадриллионная', 'квадриллионных' from dual
union all
select  6 , ' квинтиллион', ' квинтиллиона', ' квинтиллионов', 'квинтиллионная', 'квинтиллионных' from dual
union all
select  7 , ' секстиллион', ' секстиллиона', ' секстиллионов', 'секстиллионная', 'секстиллионных' from dual
union all
select  8 , ' септиллион', ' септиллиона', ' септиллионов', 'септиллионная', 'септиллионных' from dual
union all
select  9 , ' октиллион', ' октиллиона', ' октиллионов', 'октиллионная', 'октиллионных' from dual
union all
select  10 , ' нониллион', ' нониллиона', ' нониллионов', 'нониллионная', 'нониллионных' from dual
union all
select  11 , ' дециллион', ' дециллиона', ' дециллионов', 'дециллионная', 'децилионных' from dual
),
sfx as (
select  1  num, 'целый' part1_m, 'целая' part1_f, 'целое' part1_i, 'десятая' part2_1, 'сотая' part2_2, 'десяти' part2_pow from dual
union all
select  2 , 'целых', 'целых', 'целых', 'десятых', 'сотых', 'сто' from dual
union all
select  5 , 'целых', 'целых', 'целых', 'десятых', 'сотых', '' from dual
),
e as (
select
  row_number() over (order by d.part, d.lvl desc) rn
, h.hundr
  || case when t.num= 1  and n.num> 0  then n.teen else t.ten 
  || decode(d.s,'M',n.num_m,'F',n.num_f,n.num_i) end 
  || decode(d.power, 1 ,p.power1, 2 ,p.power2, 5 ,p.power5)
  || case when d.part= 1  and d.lvl= 0  then
     (select 'ноль' from a where num= 0 ) ||
     (select ' ' || decode(d.s,'M',s.part1_m,'F',s.part1_f,s.part1_i)
      from b, sfx s
      where s.num(+)=d.power and b.part2_len> 0 )
     end 
  || case when d.part= 2  and d.lvl= 0  then
     (select ' ' ||
       decode(b.part2_len, 1 ,s1.part2_1, 2 ,s1.part2_2,s2.part2_pow||decode(d.power, 1 ,p.power_1, 2 ,p.power_2, 5 ,p.power_2))
      from b, pows p, sfx s1, sfx s2
      where p.num(+)=floor(b.part2_len/ 3 ) and s1.num(+)=d.power and s2.num(+)=mod(b.part2_len, 3 ))
     end text
from d, nums h, nums t, nums n, pows p
where h.num(+)=floor(d.trinum/ 100 )
  and t.num(+)=mod(floor(d.trinum/ 10 ), 10 )
  and n.num(+)=mod(d.trinum, 10 )
  and p.num(+)=d.lvl)

select sys_xmlagg(xmlelement(col,text)).extract('ROWSET/COL/text()').getstringval() text
from e order by rn
...
Рейтинг: 0 / 0
число прописью
    #36382736
soleil_mmc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
with
a as (select - 10  num, 'I' sex from dual),

резалт

нониллионов октиллионов септиллионов секстиллионов квинтиллионов квадриллионов триллионов миллиардов миллионов тысяч
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
число прописью
    #39423619
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0.5
Код: plsql
1.
 пять десятых
...
Рейтинг: 0 / 0
число прописью
    #39423764
efendi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бакыт0.5
Код: plsql
1.
 пять десятых


ага

2.5

Код: plsql
1.
два целых пять десятых
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
число прописью
    #40021114
Kukharonok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорректировала:
with
a as (select 0.45569784114449877 num, 'M' sex from dual),
b as (select sex, floor(num) part1, nvl(to_number(substr(to_char(num-floor(num)),2)),0) part2, length(substr(to_char(num-floor(num)),2)) part2_len from a),
c as (
select
1 part,
level-1 lvl,
case when level-1=0 then sex when level-1=1 then 'F' else 'M' end s,
mod(floor(part1/power(1000,level-1)),1000) trinum
from b connect by level<=11
union all
select
2 part,
level-1 lvl,
case when level-1=0 then 'F' when level-1=1 then 'F' else 'M' end s,
mod(floor(part2/power(1000,level-1)),1000) trinum
from b connect by level<=11),
d as (
select part, lvl, s, trinum,
case when trinum=0 then 0
when mod(trinum,100) between 5 and 19 then 5
when mod(trinum,10) between 2 and 4 then 2
when mod(trinum,10)=1 then 1
else 5
end power
from c),
nums as (
select 1 num, ' один' num_m, ' одна' num_f, ' одно' num_i, ' одиннадцать' teen, ' десять' ten, ' сто' hundr from dual
union all
select 2, ' два', ' две', ' два', ' двенадцать', ' двадцать', ' двести' from dual
union all
select 3, ' три', ' три', ' три', ' тринадцать', ' тридцать', ' триста' from dual
union all
select 4, ' четыре', ' четыре', ' четыре', ' четырнадцать', ' сорок', ' четыреста' from dual
union all
select 5, ' пять', ' пять', ' пять', ' пятьнадцать', ' пятьдесят', ' пятьсот' from dual
union all
select 6, ' шесть', ' шесть', ' шесть', ' шестьнадцать', ' шестьдесят', ' шестьсот' from dual
union all
select 7, ' семь', ' семь', ' семь', ' семнадцать', ' семьдесят', ' семьсот' from dual
union all
select 8, ' восемь', ' восемь', ' восемь', ' восемьнадцать', ' восемьдесят', ' восемьсот' from dual
union all
select 9, ' девять', ' девять', ' девять', ' девятнадцать', ' девяносто', ' девятьсот' from dual
),
pows as (
select 1 num, ' тысяча' power1, ' тысячи' power2, ' тысяч' power5, 'тысячная' power_1, 'тысячных' power_2 from dual
union all
select 2, ' миллион', ' миллиона', ' миллионов', 'миллионная', 'миллионных' from dual
union all
select 3, ' миллиард', ' миллиарда', ' миллиардов', 'миллиардная', 'миллиардных' from dual
union all
select 4, ' триллион', ' триллиона', ' триллионов', 'триллионная', 'триллионных' from dual
union all
select 5, ' квадриллион', ' квадриллиона', ' квадриллионов', 'квадриллионная', 'квадриллионных' from dual
union all
select 6, ' квинтиллион', ' квинтиллиона', ' квинтиллионов', 'квинтиллионная', 'квинтиллионных' from dual
union all
select 7, ' секстиллион', ' секстиллиона', ' секстиллионов', 'секстиллионная', 'секстиллионных' from dual
union all
select 8, ' септиллион', ' септиллиона', ' септиллионов', 'септиллионная', 'септиллионных' from dual
union all
select 9, ' октиллион', ' октиллиона', ' октиллионов', 'октиллионная', 'октиллионных' from dual
union all
select 10, ' нониллион', ' нониллиона', ' нониллионов', 'нониллионная', 'нониллионных' from dual
union all
select 11, ' дециллион', ' дециллиона', ' дециллионов', 'дециллионная', 'децилионных' from dual
),
sfx as (
select 1 num, 'целый' part1_m, 'целая' part1_f, 'целое' part1_i, 'десятая' part2_1, 'сотая' part2_2, 'десяти' part2_pow from dual
union all
select 2, 'целых', 'целых', 'целых', 'десятых', 'сотых', 'сто' from dual
union all
select 5, 'целых', 'целых', 'целых', 'десятых', 'сотых', '' from dual
),
e as (
select
row_number() over (order by d.part, d.lvl desc) rn
, CASE WHEN d.part = 1 and d.lvl=0 AND d.trinum = 0 THEN 'ноль целых' END
|| h.hundr
|| case when t.num=1 and n.num>0 then n.teen else t.ten
|| decode(d.s,'M',n.num_m,'F',n.num_f,n.num_i) end
|| decode(d.power,1,p.power1,2,p.power2,5,p.power5)
|| case when d.part=1 and d.lvl=0 then
(select 'ноль' from a where num=0) ||
(select ' ' || decode(d.s,'M',s.part1_m,'F',s.part1_f,s.part1_i)
from b, sfx s
where s.num(+)=d.power and b.part2_len>0)
end
|| case when d.part=2 and d.lvl=0 then
(select ' ' ||
decode(b.part2_len,1,s1.part2_1,2,s1.part2_2,s2.part2_pow||decode(d.power,1,p.power_1,2,p.power_2,5,p.power_2))
from b, pows p, sfx s1, sfx s2
where p.num(+)=floor(b.part2_len/3) and s1.num(+)=d.power and s2.num(+)=mod(b.part2_len,3))
end text
from d, nums h, nums t, nums n, pows p
where h.num(+)=floor(d.trinum/100)
and t.num(+)=mod(floor(d.trinum/10),10)
and n.num(+)=mod(d.trinum,10)
and p.num(+)=d.lvl)

select sys_xmlagg(xmlelement(col,text)).extract('ROWSET/COL/text()').getstringval() text
from e order by rn

Спасибо за первоначальный селект!
...
Рейтинг: 0 / 0
число прописью
    #40021147
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kukharonok
Скорректировала:
Код: plsql
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.
with
a as (select 0.45569784114449877 num, 'M' sex from dual),
b as (select sex, floor(num) part1, nvl(to_number(substr(to_char(num-floor(num)),2)),0) part2
           , length(substr(to_char(num-floor(num)),2)) part2_len from a),
c as (
  select
   1 part,
   level-1 lvl,
   case when level-1=0 then sex when level-1=1 then 'F' else 'M' end s,
   mod(floor(part1/power(1000,level-1)),1000) trinum
  from b connect by level<=11
  union all
  select
   2 part,
   level-1 lvl,
   case when level-1=0 then 'F' when level-1=1 then 'F' else 'M' end s,
   mod(floor(part2/power(1000,level-1)),1000) trinum
  from b connect by level<=11),
d as (
select part, lvl, s, trinum,
  case when trinum=0 then 0
       when mod(trinum,100) between 5 and 19 then 5
       when mod(trinum,10) between 2 and 4 then 2
       when mod(trinum,10)=1 then 1
       else 5
  end power
from c),
nums as (
select 1 num, ' один' num_m, ' одна' num_f, ' одно' num_i, ' одиннадцать' teen, ' десять' ten, ' сто' hundr from dual
union all
select 2, ' два', ' две', ' два', ' двенадцать', ' двадцать', ' двести' from dual
union all
select 3, ' три', ' три', ' три', ' тринадцать', ' тридцать', ' триста' from dual
union all
select 4, ' четыре', ' четыре', ' четыре', ' четырнадцать', ' сорок', ' четыреста' from dual
union all
select 5, ' пять', ' пять', ' пять', ' пятьнадцать', ' пятьдесят', ' пятьсот' from dual
union all
select 6, ' шесть', ' шесть', ' шесть', ' шестьнадцать', ' шестьдесят', ' шестьсот' from dual
union all
select 7, ' семь', ' семь', ' семь', ' семнадцать', ' семьдесят', ' семьсот' from dual
union all
select 8, ' восемь', ' восемь', ' восемь', ' восемьнадцать', ' восемьдесят', ' восемьсот' from dual
union all
select 9, ' девять', ' девять', ' девять', ' девятнадцать', ' девяносто', ' девятьсот' from dual
),
pows as (
select 1 num, ' тысяча' power1, ' тысячи' power2, ' тысяч' power5, 'тысячная' power_1, 'тысячных' power_2 from dual
union all
select 2, ' миллион', ' миллиона', ' миллионов', 'миллионная', 'миллионных' from dual
union all
select 3, ' миллиард', ' миллиарда', ' миллиардов', 'миллиардная', 'миллиардных' from dual
union all
select 4, ' триллион', ' триллиона', ' триллионов', 'триллионная', 'триллионных' from dual
union all
select 5, ' квадриллион', ' квадриллиона', ' квадриллионов', 'квадриллионная', 'квадриллионных' from dual
union all
select 6, ' квинтиллион', ' квинтиллиона', ' квинтиллионов', 'квинтиллионная', 'квинтиллионных' from dual
union all
select 7, ' секстиллион', ' секстиллиона', ' секстиллионов', 'секстиллионная', 'секстиллионных' from dual
union all
select 8, ' септиллион', ' септиллиона', ' септиллионов', 'септиллионная', 'септиллионных' from dual
union all
select 9, ' октиллион', ' октиллиона', ' октиллионов', 'октиллионная', 'октиллионных' from dual
union all
select 10, ' нониллион', ' нониллиона', ' нониллионов', 'нониллионная', 'нониллионных' from dual
union all
select 11, ' дециллион', ' дециллиона', ' дециллионов', 'дециллионная', 'децилионных' from dual
),
sfx as (
select 1 num, 'целый' part1_m, 'целая' part1_f, 'целое' part1_i, 'десятая' part2_1, 'сотая' part2_2, 'десяти' part2_pow from dual
union all
select 2, 'целых', 'целых', 'целых', 'десятых', 'сотых', 'сто' from dual
union all
select 5, 'целых', 'целых', 'целых', 'десятых', 'сотых', '' from dual
),
e as (
select
  row_number() over (order by d.part, d.lvl desc) rn
, CASE WHEN d.part = 1 and d.lvl=0 AND d.trinum = 0 THEN 'ноль целых' END 
  || h.hundr
  || case when t.num=1 and n.num>0 then n.teen else t.ten 
  || decode(d.s,'M',n.num_m,'F',n.num_f,n.num_i) end 
  || decode(d.power,1,p.power1,2,p.power2,5,p.power5)
  || case when d.part=1 and d.lvl=0 then
     (select 'ноль' from a where num=0) ||
     (select ' ' || decode(d.s,'M',s.part1_m,'F',s.part1_f,s.part1_i)
      from b, sfx s
      where s.num(+)=d.power and b.part2_len>0)
     end 
  || case when d.part=2 and d.lvl=0 then
     (select ' ' ||
       decode(b.part2_len,1,s1.part2_1,2,s1.part2_2,s2.part2_pow||decode(d.power,1,p.power_1,2,p.power_2,5,p.power_2))
      from b, pows p, sfx s1, sfx s2
      where p.num(+)=floor(b.part2_len/3) and s1.num(+)=d.power and s2.num(+)=mod(b.part2_len,3))
     end text
from d, nums h, nums t, nums n, pows p
where h.num(+)=floor(d.trinum/100)
  and t.num(+)=mod(floor(d.trinum/10),10)
  and n.num(+)=mod(d.trinum,10)
  and p.num(+)=d.lvl)
select sys_xmlagg(xmlelement(col,text)).extract('ROWSET/COL/text()').getstringval() text
from e order by rn


Спасибо за первоначальный селект!

Для оформления кода используйте, пожалуйста, тэг SRC.
...
Рейтинг: 0 / 0
число прописью
    #40021741
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем нужна процедура на албанском йезыке?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / число прописью
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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