Похоже, вы ищете пользовательское определение недели, а не встроенные модули. Но не слишком сложно. Первым делом нужно преобразовать строки в даты (если столбцы действительно выходят из таблицы, это преобразование не требуется), и оттуда Oracle выполняет все вычисления, поскольку вы можете применять арифметические операции c к датам, кроме добавления 2. даты. Oracle автоматически обрабатывает различное количество дней в месяце правильно. Два метода для этого запроса:
- Использовать рекурсивный CTE (с)
with dates(start_date,end_date) as
( select date '2020-08-24' start_date
, date '2020-12-31' end_date
from dual
)
, weeks (wk, wk_start, wk_end, e_date) as
( select 1, start_date, start_date+6 ld, end_date from dates
union all
select wk+1, wk_end+1, wk_end+7, e_date
from weeks
where wk_end<e_date
)
select wk, wk_start, wk_end from weeks;
Используйте Oracle, подключитесь
with dates(start_date,end_date) as
( select date '2020-08-24' start_date
, date '2020-12-31' end_date
from dual
)
select level wk
, start_date+7*(level-1) wk_start
, start_date+6+7*(level-1)
from dates
connect by level <= ceil( (end_date-start_date)/7.0);
Зависит от того, насколько строго вы должны быть с указанной датой окончания, вам может потребоваться скорректировать последнюю возвращенную строку. Оба запроса не делают поправку на это. Они просто гарантируют, что после этой даты не начинается неделя. Но последняя неделя содержит полные 7 дней, которые могут закончиться после указанной даты окончания.