|
lugionline 发表于 2015-11-26 12:37 ![]()
还能更大,比方 983465
要 to_number 一下:
SQL> with function f(p_str1 varchar2,p_str2 varchar2) return int
2 as
3 s int :=0;
4 begin
5 for i in 1..length(p_str1) loop
6 s := s+ instr(p_str2,substr(p_str1,i,1));
7 end loop;
8
9 return s;
10 end;
11 t as (select level-1 n from dual connect by level<=10),
12 s(lvl,numstr,twobitsum) as (select 1 lvl,cast(n as varchar2(10)) numstr,cast(null as varchar2(30)) twobitsum
13 from t
14 where n > 0
15 union all
16 select s.lvl + 1,
17 s.numstr||t.n,
18 s.twobitsum||','||to_char(to_number(substr(s.numstr,-1)) + t.n)
19 from s,t
20 where lvl<10
21 and instr(s.numstr,t.n) = 0
22 and f(s.numstr||t.n,s.twobitsum||','||to_char(to_number(substr(s.numstr,-1)) + t.n))=0
23 )
24 select max(to_number(numstr)) from s ;
25 /
MAX(TO_NUMBER(NUMSTR))
----------------------
92837465
|
|