Rails выполняет запросы в полночь со столбцом только времени

Я использую Rails 6.0.2 и MySQl версии 5.7.

В таблице camera_events у меня есть столбцы start_time и end_time, которые оба являются типами данных time, поскольку мне не нужна дата, мне просто нужно знать, когда событие начинается и когда оно заканчивается.

Я пытаюсь запросить таблицу, чтобы получить все события, которые попадают МЕЖДУ start_time и end_time. проблема заключается в том, что любое событие, промежуток времени которого приходится на полночь или для которого end_time установлено значение полночь, так как оно записано в базе данных как < сильный>00:00.

Моя проблема заключается в попытке найти любые события, которые приходятся на определенное время, например, с 22:00 до 02:00.


person Tony Petruzzi    schedule 26.08.2020    source источник
comment
Взгляните на мой ответ на другой подобный вопрос. По сути, вы должны использовать полуоткрытые интервалы и написать свой запрос, как показано в последнем примере псевдокода.   -  person Matt Johnson-Pint    schedule 27.08.2020


Ответы (1)


Сегодня в 2 часа ночи у меня появилась идея, и я фактически решил свою проблему. То, как мне пришлось это сделать, состояло в том, чтобы разбить запрос на 2 оператора where с оператором or. По сути, я проверяю, больше ли end_time, чем start_time (для всего, например, с 01:00 до 10:00), и где end_time меньше, чем start_time (что означает, что end_time охватывает полночь, например 22 часа). с 00: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
person Tony Petruzzi    schedule 26.08.2020