我正在尝试执行一个活动记录查询,通过查看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"
应返回第一个和第二个记录。
答案 0 :(得分:2)
要直接执行此操作,您需要使用特定于供应商的SQL。
e.g:
Car.where('extract(hour from created_at) between 1 and 6')
Car.where('hour(created_at) between 1 and 6')
但是,除非您可以对表达式进行索引,否则在大型表上这不会很快。例如,如果您使用的是MySQL,则可能希望将小时存储在单独的列中,以便对其进行索引。然后条件也会简化为Car.where(created_hour: 1..6)
。