Архив

Публикации с меткой ‘разбить период’

Разбить период на месяца

5 Август 2010 8 comments
with t as (
  select to_date('03-05-2010','dd-mm-yyyy') d1,
         to_date('26-08-2010','dd-mm-yyyy') d2
  from dual
)
--
select decode(level,1,d1,trunc(add_months(d1,level-1),'mm')) as date_from,
       case when add_months(trunc(d1,'mm'),level)>d2 then d2
            else last_day(add_months(d1,level-1))
       end date_to
from t
connect by add_months(trunc(d1,'mm'),level-1) < d2;


DATE_FROM   DATE_TO
----------- -----------
03.05.2010  31.05.2010
01.06.2010  30.06.2010
01.07.2010  31.07.2010
01.08.2010  26.08.2010

Если хотим, чтобы в период входил 1 день последнего месяца, то :

with t as (
  select to_date('03-05-2010','dd-mm-yyyy') d1,
         to_date('01-08-2010','dd-mm-yyyy') d2
  from dual
)
--
select decode(level,1,d1,trunc(add_months(d1,level-1),'mm')) as date_from,
       case when add_months(trunc(d1,'mm'),level)>d2 then d2
            else last_day(add_months(d1,level-1))
       end date_to
from t
connect by add_months(trunc(d1,'mm'),level-1) <= d2;

DATE_FROM   DATE_TO
----------- -----------
03.05.2010  31.05.2010
01.06.2010  30.06.2010
01.07.2010  31.07.2010
01.08.2010  01.08.2010