是否有可能在任何DBMS(最好是MySQL或PostgreSQL)中都有一个列总是引用特定时间发生的下一个日期?例如,存储时间02:00将给出下一个发生日期时间02:00。
在总线时间表场景(具有固定时间表)中需要这样,其中需要容易地查询下一总线的时间。这可以通过类似where time > NOW() order by time asc
的方式完成。然而,这不适用于在午夜之后在23:00查询下一班巴士的情况。
我想到的解决方案(在编程语言中没有处理它)是使用条件选择列创建视图,类似于select if date(time) < now then date(time) + 24 hours else date(time)
答案 0 :(得分:4)
示例数据:
create table timetable (id int, dep_time time);
insert into timetable values
(1, '1:00'),
(2, '7:00'),
(3, '13:00'),
(4, '19:00'),
(5, '23:00');
查询在22:00左右执行(结果取决于查询执行的时间):
select *,
case when dep_time < current_time
then current_date+ 1+ dep_time
else current_date+ dep_time
end dep_datetime
from timetable
order by 3;
id | dep_time | dep_datetime
----+----------+---------------------
5 | 23:00:00 | 2016-02-01 23:00:00
1 | 01:00:00 | 2016-02-02 01:00:00
2 | 07:00:00 | 2016-02-02 07:00:00
3 | 13:00:00 | 2016-02-02 13:00:00
4 | 19:00:00 | 2016-02-02 19:00:00
(5 rows)
在MySql中,查询可能如下所示:
select *,
case when dep_time < current_time
then current_date+ interval time_to_sec(dep_time) second+ interval 1 day
else current_date+ interval time_to_sec(dep_time) second
end dep_datetime
from timetable
order by 3;