Stai diventando nell'ordine siete, perché stai ordinando da una stringa (e questo non avrebbe funzionato perché non stai selezionando dal nulla) .
Si poteva ordinare dal format model utilizzato per creare il giorno della settimana in forma numerica, D
, ma come la Domenica è 1 in questo mi consiglia di utilizzare mod()
per fare questo lavoro.
cioè assumendo tabella
create table a (b date);
insert into a
select sysdate - level
from dual
connect by level <= 7;
questo dovrebbe funzionare:
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 a manifestare.
Nel tuo caso la query sarebbe diventato:
select ename, to_char(hiredate,'fmDay') as "Day"
from my_table
order by mod(to_char(hiredate, 'D') + 5, 7)
questo è il giorno di inizio di domenica. –