SELECT ( CASE WHEN to_number(substr(:year,length(:year)-1,2))+1 > (SELECT f.days FROM (with x as (select level lvl from dual connect by level <= ( add_months(trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y'),12) - trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y') ) ) select TRIM(to_char(trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y')+lvl-1,'DAY')) as day, count(*) as days from x group by to_char(trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y')+lvl-1,'DAY') ) f WHERE f.day='THURSDAY' ) THEN TO_NUMBER(SUBSTR(:year,0,4))+1 ELSE TO_NUMBER(SUBSTR(:year,0,4)) END) || lpad( CASE WHEN to_number(substr(:year,length(:year)-1,2))+1 > (SELECT f.days FROM (with x as (select level lvl from dual connect by level <= ( add_months(trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y'),12) - trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y') ) ) select TRIM(to_char(trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y')+lvl-1,'DAY')) as day, count(*) as days from x group by to_char(trunc(to_date(SUBSTR(:year,0,4),'YYYY'),'y')+lvl-1,'DAY') ) f WHERE f.day='THURSDAY' ) THEN 1 ELSE to_number(substr(:year,length(:year)-1,2))+1 END, 2,'0') from dual;