select
to_char(caldates.dates,'YYYYMMDD') YYYYMMDD,
to_char(caldates.dates,'MM') MM,
to_char(caldates.dates,'DD') DD,
-- 현재달인지 체크
case when to_char(caldates.dates,'MM') = to_char(TO_DATE('20160801','YYYYMMDD'),'MM') then 'Y' else 'N' end IsThisMonth,
-- 최소 몇일전 예약가능
case when to_char(caldates.dates,'YYYYMMDD') >= to_char(sysdate + 2,'YYYYMMDD') then 'Y' else 'N' end IsFromday,
-- 최소 몇달전 예약가능
case when to_char(caldates.dates,'YYYYMMDD') >= to_char(add_months(sysdate,1),'YYYYMMDD') then 'Y' else 'N' end IsFromMonth,
-- 오늘부터 이번달 말까지 예약가능
case when to_char(caldates.dates,'YYYYMMDD') between to_char(sysdate,'YYYYMMDD') and to_char(last_day(add_months(sysdate,0)),'YYYYMMDD') then 'Y' else 'N' end IsRtypeB,
-- 오늘부터 몇일까지 예약가능
case when to_char(caldates.dates,'YYYYMMDD') between to_char(sysdate,'YYYYMMDD') and to_char(to_date('20160708','YYYYMMDD'),'YYYYMMDD') then 'Y' else 'N' end IsRtypeD,
-- 오늘부터 몇개월까지 예약가능
case when to_char(caldates.dates,'YYYYMMDD') between to_char(sysdate,'YYYYMMDD') and to_char(add_months(sysdate,1),'YYYYMMDD') then 'Y' else 'N' end IsRtypeAM,
-- 오늘부터 몇일동안 예약가능
case when to_char(caldates.dates,'YYYYMMDD') between to_char(sysdate,'YYYYMMDD') and to_char(sysdate + 10,'YYYYMMDD') then 'Y' else 'N' end IsRtypeAD,
-- 다음달(1), 다다음달(2), 다다다음달(3) 1일부터 월말까지 예약가능
case when to_char(caldates.dates,'YYYYMMDD') between to_char(trunc(add_months(sysdate,2),'MM'),'YYYYMMDD') and to_char(last_day(add_months(sysdate,2)),'YYYYMMDD') then 'Y' else 'N' end IsRtypeC
from (
SELECT NEXT_DAY(TO_DATE('20160801','YYYYMMDD') - 7, 1 ) + ROWNUM - 1 DATES
FROM ALL_OBJECTS
WHERE ROWNUM <= (NEXT_DAY(LAST_DAY(TO_DATE('20160801','YYYYMMDD')),1) - NEXT_DAY((TO_DATE('20160801','YYYYMMDD') - 7),1))
) caldates
;