with t as ( select to_date('2016-08-19','yyyy-mm-dd') dt from dual ) select to_char(to_date(dd,'j'),'ddspth') || ' day of ' || trim(to_char(dt, 'Month', 'nls_date_language=english')) || ', ' || to_char(to_date(yyyy,'j'),'jsp') dt from ( select to_char(dt,'yyyy') yyyy , to_char(dt,'dd') dd , dt from t )