|
六位以内可以求出来:
WITH d AS (
SELECT LEVEL-1 n,POWER(10,LEVEL-1) p
,decode(level,1,4,length(to_char(to_date(level-1, 'J'), 'Jsp'))) c
FROM DUAL CONNECT BY LEVEL<=10
)
,d3 as (
select lpad(max(n),3,'0') n,cnt_all,c_all,cnt_leading,c_leading,to_char(to_date(max(n), 'J'), 'Jsp') as eng,length(replace(replace(to_char(to_date(max(n), 'J'), 'Jsp'),'-'),' ')) cnt
from (SELECT to_number(d1.n||d2.n||d3.n) n
,d1.p+d2.p+d3.p as cnt_all
,d1.c+d2.c+d3.c as c_all
,decode(d1.n,0,0,d1.p)+(case when d1.n=0 and d2.n=0 then 0 else d2.p end)+d3.p as cnt_leading
,decode(d1.n,0,0,d1.c)+(case when d1.n=0 and d2.n=0 then 0 else d2.c end)+d3.c as c_leading
FROM d d1,d d2, d d3
)
where instr(cnt_all,'3')=0
group by cnt_all,c_all,cnt_leading,c_leading,length(replace(replace(to_char(to_date(n, 'J'), 'Jsp'),'-'),' '))
)
select to_number(max(a.n||b.n))
from d3 a,d3 b
where instr(a.cnt_leading+b.cnt_all,'3')=0 and instr(a.cnt_leading+b.cnt_all,'4')=0
and a.cnt+length('thousand')+b.cnt=a.c_leading+b.c_all
;
TO_NUMBER(MAX(A.N||B.N))
------------------------
18010
九位以内找不到答案:
WITH d AS (
SELECT LEVEL-1 n,POWER(10,LEVEL-1) p
,decode(level,1,4,length(to_char(to_date(level-1, 'J'), 'Jsp'))) c
FROM DUAL CONNECT BY LEVEL<=10
)
,d3 as (
select lpad(max(n),3,'0') n,cnt_all,c_all,cnt_leading,c_leading,to_char(to_date(max(n), 'J'), 'Jsp') as eng,length(replace(replace(to_char(to_date(max(n), 'J'), 'Jsp'),'-'),' ')) cnt
from (SELECT to_number(d1.n||d2.n||d3.n) n
,d1.p+d2.p+d3.p as cnt_all
,d1.c+d2.c+d3.c as c_all
,decode(d1.n,0,0,d1.p)+(case when d1.n=0 and d2.n=0 then 0 else d2.p end)+d3.p as cnt_leading
,decode(d1.n,0,0,d1.c)+(case when d1.n=0 and d2.n=0 then 0 else d2.c end)+d3.c as c_leading
FROM d d1,d d2, d d3
)
where instr(cnt_all,'3')=0
group by cnt_all,c_all,cnt_leading,c_leading,length(replace(replace(to_char(to_date(n, 'J'), 'Jsp'),'-'),' '))
)
,d6 as (
select a.n||b.n n
,a.cnt_all+b.cnt_all cnt_all
,a.c_all+b.c_all c_all
,a.cnt+length('thousand')+b.cnt cnt
from d3 a,d3 b
where instr(a.cnt_all+b.cnt_all,'3')=0 and instr(a.cnt_all+b.cnt_all,'4')=0
)
select TO_NUMBER(max(a.n||b.n))
from d3 a,d6 b
where instr(a.cnt_leading+b.cnt_all,'3')=0 and instr(a.cnt_leading+b.cnt_all,'4')=0
and a.cnt+length('Million')+b.cnt=a.c_leading+b.c_all
;
TO_NUMBER(MAX(A.N||B.N))
------------------------
Elapsed: 00:01:08.59 |
|