|
newkid 发表于 2015-11-26 23:34 ![]()
这老头忒不地道,又改题目了。加菲猫把新题再做一遍,不许用12C的WITH PLSQL函数,才能得到章。
ADJACEN ...
终于改了,不用12C的PLSQL了:
SQL> with
2 t as (select level-1 n from dual connect by level<=10),
3 s(lvl,numstr,threebitsum) as (select 3 lvl,
4 cast(a.n||b.n||c.n as varchar2(10)) numstr,
5 cast(a.n+b.n+c.n as varchar2(30)) threebitsum
6 from t a,t b,t c
7 where a.n > 0
8 and a.n <> b.n
9 and a.n <> c.n
10 and b.n <> c.n
11 and instr(to_char(a.n+b.n+c.n),a.n) =0
12 and instr(to_char(a.n+b.n+c.n),b.n) =0
13 and instr(to_char(a.n+b.n+c.n),c.n) =0
14 union all
15 select s.lvl + 1,
16 s.numstr||t.n,
17 s.threebitsum||','||to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n)
18 from s,t
19 where lvl<10
20 and instr(s.numstr,t.n) = 0
21 and instr(s.threebitsum||','||to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n),t.n) = 0
22 and instr(s.numstr, substr(to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n),1,1))=0
23 and instr(s.numstr, substr(to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n),-1,1))=0
24 )
25 select max(to_number(numstr)) from s;
MAX(TO_NUMBER(NUMSTR))
----------------------
9574083 |
|