0

我正在使用 Rails 6.0.2 和 MySQl 5.7 版。

在 camera_events 表上,我有一个start_time和一个end_time列,它们都是时间数据类型,因为我不需要日期,我只需要知道事件何时开始以及何时结束。

我正在尝试查询表以获取在 start_time 和 end_time 之间发生的所有事件。问题是任何时间跨度跨越午夜或将end_time设置为午夜的事件,因为它在数据库中记录为00:00

我的问题是试图找到介于某个时间(如 22:00 和 02:00)之间的任何事件。

4

1 回答 1

0

今天凌晨 2 点,我有了一个想法,实际上我解决了我的问题。我必须这样做的方法是将查询分成 2 个带有 or 的 where 语句。基本上我正在做的是检查 end_time 是否大于 start_time (对于整个像 01:00 到 10:00)以及 end_time 小于 start_time 的地方(这意味着 end_time 跨越午夜像 22 :00 至 02:00)。

  def time_span_search(current_time)
    CameraEvent
        .where('end_time > start_time and start_time <= ? and end_time >= ?', current_time, current_time)
        .or(
            CameraEvent
                .where('end_time <= start_time and start_time <= ? and start_time <= ? and end_time >= ? and end_time <= ?', current_time, '23:59', '00:00', current_time) )
        .pluck(:id)
  end
于 2020-08-26T13:40:08.050 回答