WITH t(s_date,e_date) AS ( SELECT '20180401' , '20180405' FROM DUAL UNION ALL SELECT '20180408' , '20180410' FROM DUAL ) SELECT s_date + lv - 1 FROM (SELECT TO_DATE(s_date) s_date, TO_DATE(e_date) e_date FROM t), (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 99) WHERE LV <= e_date - s_date + 1 ORDER BY s_date, lv