如何解决Rails跨午夜查询仅限时间列
我正在使用Rails 6.0.2和MySQl版本5.7。
在camera_events表上,我有一个开始时间和一个结束时间列,它们都是时间数据类型,因为我不需要日期,我只需要知道事件何时开始以及何时结束。
我正在尝试查询表以获取所有介于start_time和end_time之间的事件。问题是,时间跨度午夜或将其 end_time 设置为午夜的任何事件,因为在数据库中记录为 00:00 。
我的问题是尝试查找介于22:00至02:00之间的任何事件。
解决方法
今天凌晨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 <= ?','23:59','00:00',current_time) )
.pluck(:id)
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。