2010-01-11

Задачка по ораклу с датами

/* задан период между датами. надо получить курсор с датами с разбивкой по месяцам
Пример: дано 13.10.2009 - 17.12.2009
Получаем:
13.10.2009-31.10.2009
01.11.2009-30.11.2009
01.12.2009-17.12.2009
*/

select greatest(add_months(trunc(dat1,'MONTH'), cnt), dat1) as rd1,
       least(add_months(trunc(dat1,'MONTH'), cnt+1)-1, dat2) as rd2
  from (
    select to_date('13.10.2009','DD.MM.YYYY') as dat1, to_date('17.12.2009','DD.MM.YYYY') as dat2 from dual),
      (select rownum-1 cnt from 
          (select 1 from dual union all select 1 from dual),
          (select 1 from dual union all select 1 from dual),
          (select 1 from dual union all select 1 from dual),
          (select 1 from dual union all select 1 from dual),
          (select 1 from dual union all select 1 from dual),
          (select 1 from dual union all select 1 from dual),
          (select 1 from dual union all select 1 from dual),
          (select 1 from dual union all select 1 from dual)
        where rownum<=(SELECT trunc(MONTHS_BETWEEN(trunc(to_date('17.12.2009','DD.MM.YYYY'),'MONTH'), 
                                                   trunc(to_date('13.10.2009','DD.MM.YYYY'),'MONTH')))+1 FROM dual));

Комментариев нет:

Отправить комментарий