Как разбить диапазон дат на кварталы?

Есть диапазон дат:

create table t1 (df,dl) as  
    select date'2020-02-03' df, date'2020-07-24' dl from dual

Как разбить диапазон дат на кварталы так, чтобы границы диапазона являлись началом первого и последнего кварталов соответственно?

Ожидаемый результат:

  df         | dl
  -----------------------
  03.02.2020 | 31.03.2020
  01.04.2020 | 30.06.2020
  01.07.2020 | 27.07.2020

Ответы (1 шт):

Автор решения: pr5

Решение составлено из нескольких подсказок в комментариях:

with t1 as (
  select date'2020-02-03' df, date'2020-07-24' dl from dual )
select  
  case when level = 1
    then t1.df
    else add_months( trunc(t1.df, 'Q'), 3*(level - 1) )
  end df,  
  case when add_months( trunc(t1.df, 'Q'), 3*(level) ) - 1 > t1.dl
    then t1.dl
    else add_months( trunc(t1.df, 'Q'), 3*(level) ) - 1
  end dl
from t1
connect by add_months( trunc(t1.df, 'Q'), 3*(level-1) ) - 1 <= t1.dl;
→ Ссылка