| Bogdanov Andrey |
| dmidek | В лоб через pivot [/src] |
Самый наглядный способ, но довольно медленный. |
+1
Присоединен к:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production
SQL> set timing on
SQL> with t as (select to_date('01.01.0001','dd.mm.yyyy') d1,
2 to_date('01.03.9999','dd.mm.yyyy') d2 from dual)
3 select sum(case to_char(d1+level,'mmdd') when '0229' then 1 end) c
4 from t connect by level < d2-d1;
C
----------
2436
Затрач.время: 00:00:27.10
SQL> ;
1 with t as (select to_date('01.01.0001','dd.mm.yyyy') d1,
2 to_date('01.03.9999','dd.mm.yyyy') d2 from dual)
3 select sum(case to_char(d1+level,'mmdd') when '0229' then 1 end) c
4* from t connect by level < d2-d1
SQL> with t as (select to_date('01.01.0001','dd.mm.yyyy') d1,
2 to_date('01.03.9999','dd.mm.yyyy') d2 from dual)
3 ,t2 as (select t.*,trunc(d1,'y') y1,trunc(d2,'y') y2 from t)
4 ,t3 as (select d1,d2,y1,y2,last_day(add_months(y1,(level-1)*12+1)) dd from t2
5 connect by level*12 <= months_between(y2,y1)+12)
6 select count(*) from t3 where d1 <= dd and dd <= d2 and extract(day from dd)=29;
COUNT(*)
----------
2436
Затрач.время: 00:00:00.14