Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle sql trier les jours de la semaine par jour actuel

Si vous essayez de trier un ensemble de dates par jour de la semaine, le samedi étant le premier, envisagez de trier par date modifiée :

create table t1(my_date date);
insert into t1
select trunc(sysdate)+rownum
from dual
connect by level <= 20

select
  my_date,
  to_char(my_date,'Day'),
  to_char(my_date,'D')
from
  t1
order by
  to_char(my_date + 1,'D');

http://sqlfiddle.com/#!4/5940b/3

L'inconvénient est que ce n'est pas très intuitif, alors ajoutez un commentaire de code si vous utilisez cette méthode.

Modifier :Lorsque vous avez une liste de numéros, commandez par une déclaration de cas avec soit une conversion de liste :

case day
  when 1 then 3
  when 2 then 4
  when 3 then 5
  when 4 then 6
  when 5 then 7
  when 6 then 1 -- saturday
  when 7 then 2
end

... ou le plus compact, mais moins intuitif :

case
  when day <= 5 then day + 2
  else               day - 5
end

order by case