Oracle
 sql >> Database >  >> RDS >> Oracle

Ordina per giorno della settimana dal lunedì alla domenica

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)