Activerecord在datetime中按时间查找记录

我正在尝试执行一个活动记录查询,通过查看datetime字段按时间返回记录。 具体来说,我希望获得在凌晨1点到早上6点之间创建的所有记录,而不是关心它们创建的那一天,只是确保时间在该范围内。

所以,如果我有记录:

1: car=> "Honda", color: "blue", created_at => "2014-11-13 01:15:00" 2: car=> "Toyota", color: "red", created_at => "2014-11-17 04:15:00" 3: car=> "Honda", color: "red", created_at => "2014-11-20 10:15:00" 

应返回第一个和第二个记录。

要直接执行此操作,您需要使用特定于供应商的SQL。

例如:

  • postgresql: Car.where('extract(hour from created_at) between 1 and 6')
  • mysql: Car.where('hour(created_at) between 1 and 6')

但是,除非您可以对表达式进行索引,否则在大型表上这不会很快。 例如,如果您使用的是MySQL,则可能希望将小时存储在单独的列中,以便对其进行索引。 然后条件也将简化为Car.where(created_hour: 1..6)