Date Queries
-- 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
;

Data Conversion

Database Reference    Dual Table Queries    Week Day    OracleViews    SQL Functions

Oracle registered trademark of Oracle Corporation.

Last Revised On: December 20th, 2013

  23814