Lo está obteniendo en el orden en que está porque está ordenando por una cadena (y esto no funcionaría porque no está seleccionando nada).
Puede ordenar por el modelo de formato utilizado para crear el día de la semana en forma numérica, D
, pero como el domingo es 1 en esto, recomendaría usar mod()
para que esto funcione.
es decir, asumiendo la mesa
create table a ( b date );
insert into a
select sysdate - level
from dual
connect by level <= 7;
Esto funcionaría:
select mod(to_char(b, 'D') + 5, 7) as dd, to_char(b, 'DAY')
from a
order by mod(to_char(b, 'D') + 5, 7)
Aquí hay un SQL Fiddle para demostrarlo.
En su caso, su consulta se convertiría en:
select ename, to_char(hiredate,'fmDay') as "Day"
from my_table
order by mod(to_char(hiredate, 'D') + 5, 7)