Activerecord在datetime中按时间查找记录

时间:2014-11-25 23:06:50

标签: ruby-on-rails ruby activerecord

我正在尝试执行一个活动记录查询,通过查看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"

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

1 个答案:

答案 0 :(得分:2)

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

e.g:

  • 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)