我试图根据顺序对日期进行排序:周六、周日、周一、周二、周三、周四、周五。
我正在尝试使用案例:
select day,
CASE day
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 3
WHEN 4 THEN 4
WHEN 5 THEN 5
WHEN 6 THEN 6
WHEN 7 THEN 7
else 0
END as day_nr
from week where day in (1,2,3,4,5,6,7)
order by day_nr asc
当我选择一周中的所有天时,这是可以的。但如果我只想要 1、5、6 天,则顺序不正确。获得第一天 - 星期一。如何进行?
如果您尝试按一周中的某一天对一组日期进行排序(其中星期六是第一个),请考虑按修改后的日期排序:
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 http://sqlfiddle.com/#!4/5940b/3
缺点是不太直观,所以如果使用此方法,请添加代码注释。
编辑:如果您有数字列表,请通过带有列表转换的案例语句进行排序:
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
...或更紧凑,但不那么直观:
case
when day <= 5 then day + 2
else day - 5
end
order by case
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)