Вот что нарылось:
var psysdate varchar2;
exec :psysdate := to_date('01-MaY-2015','dd-mon-yyyy');
select decode( rtrim(to_char(last_day(:psysdate),'DAY')),
'SATURDAY',last_day(:psysdate)-1,
'SUNDAY',last_day(:psysdate)-2,
last_day(:psysdate)
) business_date,
to_char(
decode( rtrim(to_char(last_day(:psysdate),'DAY')),
'SATURDAY',last_day(:psysdate)-1,
'SUNDAY',last_day(:psysdate)-2,
last_day(:psysdate)
),'DAY'
) business_day
from dual;
BUSINESS_DATE BUSINESS_DAY
------------- ------------
29-May-2015 FRIDAY
via: http://oracle.ittoolbox.com/groups/technical-functional/oracle-db-l/how-to-get-the-last-business-day-of-a-month-2086576