-- Get first Sunday date in current year SELECT TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'yyyy')),level-1),'mm/dd/yyyy') first_day, CASE TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'yyyy')),level-1),'DY') WHEN 'SUN' THEN ADD_MONTHS(TRUNC(SYSDATE,'yyyy')),level-1) ELSE NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE,'yyyy')),level-1),'SUN') END cy_sunday_date FROM DUAL CONNECT BY level <= 12 ; -- Get first day date of any year SELECT TO_CHAR(ADD_MONTHS(qt.first_day_of_year,level-1),'mm/dd/yyyy [dy]') first_day, 'First '||TO_CHAR(CASE WHEN TO_CHAR(ADD_MONTHS(qt.first_day_of_year,level-1),'DY') = ''||qt.ref_wk_day||'' THEN TO_CHAR(ADD_MONTHS(qt.first_day_of_year,level-1) ELSE NEXT_DAY(ADD_MONTHS(qt.first_day_of_year,level-1),''||qt.ref_wk_day||'') END, 'DY -> mm/dd/yyyy') first_week_day FROM (SELECT TRUNC(TO_DATE(&yyyy,'yyyy'),'yyyy') first_day_of_year ,UPPER('&day') ref_wk_day FROM DUAL) qt CONNECT BY level <=12 ;
23814