/* задан период между датами. надо получить курсор с датами с разбивкой по месяцам
Пример: дано 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));
Комментариев нет:
Отправить комментарий