with t1 as ( select '2017,2013,2012' year from dual ) , t2 as ( select '03-01' fdt, '03-05' tdt from dual ) select to_date(fromdt,'yyyy-mm-dd') + lv - 1 dt from ( select year||'-'||fdt fromdt, year||'-'||tdt todt from ( select regexp_substr(year,'[^,]+',1,lv) year from t1 ,(select level lv from dual connect by level <= 10) where regexp_count(year,',') >= lv - 1 ) a , t2 b ) c ,(select level lv from dual connect by level <= 365) d where to_date(fromdt,'yyyy-mm-dd') + lv - 1 <= to_date(todt,'yyyy-mm-dd')