2012-12-01 15 views
7

Se scrivoOrdina per giorno della settimana da Lunedi a Domenica

select ename, to_char(hiredate,'fmDay') as "Day" order by "Day"; 

Poi ordina il risultato sulla base di giorno come; da venerdì, poi lunedì e mercoledì scorso, come l'ordinamento per caratteri.

Ma voglio ordinarlo per giorno della settimana; dal lunedì alla domenica.

risposta

4

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) 
1

Perché a complicare quando si può aggiungere un'altra colonna con i numeri 1-7 corrispondono a giorni e poi ordina per questa colonna ...

0

I ho appena incontrato lo stesso requisito: ordinare un risultato di ricerca per giorno della settimana, ma non iniziare con domenica. Ho usato la seguente query in Oracle per iniziare w/Monday. (Modificalo per iniziare l'ordine con qualsiasi giorno della settimana, ad es. Modifica "LUNEDI '" a "MARTEDI".)

SELECT ename, to_char(hiredate, 'fmDAY') AS "Day" 
FROM emp 
ORDER BY (next_day(hiredate, 'MONDAY') - hiredate) DESC 

Oppure:

SELECT ename, to_char(hiredate, 'fmDAY') AS "Day" 
FROM emp 
ORDER BY (hiredate - next_day(hiredate, 'MONDAY')) 
0

SELEZIONARE * DA classi ORDER BY CASO quando il giorno = 'Domenica' ALLORA 1 quando il giorno = 'Lunedi' quindi 2 QUANDO Giorno = 'Martedì' ALLORA 3 QUANDO GIORNO = 'mercoledì' ALLORA 4 QUANDO GIORNO = 'giovedì' ALL'INIZIO 5 QUANDO Giorno = 'Venerdì' ALL'INIZIO 6 quando il giorno = 'Sabato' poi 7 FINE ASC

SELECT 
 
    * 
 
FROM 
 
    classes 
 
ORDER BY 
 
    CASE 
 
      WHEN Day = 'Sunday' THEN 1 
 
      WHEN Day = 'Monday' THEN 2 
 
      WHEN Day = 'Tuesday' THEN 3 
 
      WHEN Day = 'Wednesday' THEN 4 
 
      WHEN Day = 'Thursday' THEN 5 
 
      WHEN Day = 'Friday' THEN 6 
 
      WHEN Day = 'Saturday' THEN 7 
 
    END ASC

supponendo che l'utente ha una tabella chiamata classi a quell'utente tabella ha class_id (chiave primaria), nome della classe, Giorno

Problemi correlati