|
写了一个验证的sql
select num, div, p1, p2, p2-p1 len, decode(count(case when p2-p1<0 then 1 else null end)over(),0,1,0) isValid,
sum(case when p2-p1>0 then p2-p1 else null end)over() sumnum
,decode(lag(p2-p1)over(order by p2-p1, div), p2-p1,0,1) isValid2 from
(select num,div, instr(num, div, 1, 1) p1, instr(num, div, 1, 2) p2 from (select &a num, rownum-1 div from dual connect by rownum<=10))
where p1-p2<>0
输入你得出的数字,如果isvalid和isvalid2全为1,则说明合格
len-1就表示中间包含的数字了,目前凑出来的最大的数是 99878675432103526401
输入 a 的值: 99878675432103526401
原值 4: (select num,div, instr(num, div, 1, 1) p1, instr(num, div, 1, 2) p2 from (select &a num, rownum-1 div from dual connect by rownum<=10))
新值 4: (select num,div, instr(num, div, 1, 1) p1, instr(num, div, 1, 2) p2 from (select 99878675432103526401 num, rownum-1 div from dual connect by rownum<=10))
NUM DIV P1 P2 LEN ISVALID SUMNUM ISVALID2
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
9.9879E+19 9 1 2 1 1 56 1
9.9879E+19 8 3 5 2 1 56 1
9.9879E+19 7 4 7 3 1 56 1
9.9879E+19 3 10 14 4 1 56 1
9.9879E+19 2 11 16 5 1 56 1
9.9879E+19 0 13 19 6 1 56 1
9.9879E+19 5 8 15 7 1 56 1
9.9879E+19 1 12 20 8 1 56 1
9.9879E+19 4 9 18 9 1 56 1
9.9879E+19 6 6 17 11 1 56 1
已选择10行。
按p1排序了
SCOTT@lw.lw> select num, div, p1, p2, p2-p1 len, decode(count(case when p2-p1<0 then 1 else null end)over(),0,1,0) isValid,
2 sum(case when p2-p1>0 then p2-p1 else null end)over() sumnum
3 ,decode(lag(p2-p1)over(order by p2-p1, div), p2-p1,0,1) isValid2 from
4 (select num,div, instr(num, div, 1, 1) p1, instr(num, div, 1, 2) p2 from (select &a num, rownum-1 div from dual connect by rownum<=10))
5 where p1-p2<>0 order by p1;
输入 a 的值: 99878675432103526401
原值 4: (select num,div, instr(num, div, 1, 1) p1, instr(num, div, 1, 2) p2 from (select &a num, rownum-1 div from dual connect by rownum<=10))
新值 4: (select num,div, instr(num, div, 1, 1) p1, instr(num, div, 1, 2) p2 from (select 99878675432103526401 num, rownum-1 div from dual connect by rownum<=10))
NUM DIV P1 P2 LEN ISVALID SUMNUM ISVALID2
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
9.9879E+19 9 1 2 1 1 56 1
9.9879E+19 8 3 5 2 1 56 1
9.9879E+19 7 4 7 3 1 56 1
9.9879E+19 6 6 17 11 1 56 1
9.9879E+19 5 8 15 7 1 56 1
9.9879E+19 4 9 18 9 1 56 1
9.9879E+19 3 10 14 4 1 56 1
9.9879E+19 2 11 16 5 1 56 1
9.9879E+19 1 12 20 8 1 56 1
9.9879E+19 0 13 19 6 1 56 1
已选择10行。
基本上大的数都排在前面了,而且都按从大到小排了
不折腾了,我目前找不到一个更大数了,因为没有一个更好的方法…… |
|