下一次出现时间SQL

时间:2016-02-01 19:22:03

标签: mysql sql postgresql datetime time

是否有可能在任何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)

1 个答案:

答案 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)    

Db<>fiddle.

在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;

Db<>fiddle.