Lo stai ricevendo nell'ordine in cui sei perché stai ordinando per stringa (e questo non funzionerebbe perché non stai selezionando da nulla).
Puoi ordinare in base al modello di formato utilizzato per creare il giorno della settimana in forma numerica, D
, ma dato che domenica è 1 in questo, consiglierei di usare mod()
per farlo funzionare.
cioè assumendo la tabella
create table a ( b date );
insert into a
select sysdate - level
from dual
connect by level <= 7;
Questo funzionerebbe:
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)
Ecco un SQL Fiddle da dimostrare.
Nel tuo caso la tua richiesta diventerebbe:
select ename, to_char(hiredate,'fmDay') as "Day"
from my_table
order by mod(to_char(hiredate, 'D') + 5, 7)