sql >> Base de Datos >  >> RDS >> Oracle

Oracle sql ordena los días de la semana por el día actual

Si está tratando de ordenar un conjunto de fechas por día de la semana, siendo el sábado el primero, considere ordenar por una fecha modificada:

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

La desventaja es que no es muy intuitivo, así que agrega un comentario de código si usas este método.

Editar:donde tenga una lista de números, ordene por una declaración de caso con una conversión de lista:

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

... o el más compacto, pero no tan intuitivo:

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

order by case