Activerecord 在日期时间中按时间查找记录

use*_*830 1 ruby activerecord ruby-on-rails

我正在尝试通过查看日期时间字段来执行按时间返回记录的活动记录查询。具体来说,我想获取在凌晨 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"
Run Code Online (Sandbox Code Playgroud)

应该返回第一条和第二条记录。

小智 5

要直接执行此操作,您需要使用大量特定于供应商的 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)