2012-05-28 68 views
7

我有一个导轨应用程序,它有一个Checkin模型。我想查找当天特定时间范围内的所有记录。我如何编写where以获取在12PM和4:30 PM之间创建的所有记录?两次导轨查询

+0

您正在使用哪个数据库?获得一天中的小时数的功能将有所不同。除了时间之外,如果您将存储一天中的小时/分钟,这将是最容易的。 –

+0

我正在使用postgresql。我使用Rails提供的标准'created_at'时间戳列 –

回答

36

@ x1a4的答案应该对你有好处,但你可以使用范围以更可读和更短的方式做到这一点。

Chekin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm")) 

应该产生这样的:

SELECT "checkins".* 
FROM "checkins" 
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000') 

你可以用任何其他方法来创建一个时间变化Time.parse("12pm")

8

这看起来像它会工作,假设UTC时区:

Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours) 

或用BETWEEN

Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours) 

BETWEEN可能还是不包括在范围内的第二值。 Postgres includes it

0

你可以使用下面的宝石来查找日期之间的记录,

gem很容易使用和更清晰的[星空] [1]。我使用这个宝石,API更清晰,文档也很好解释。

Post.between_times(
Time.zone.now - 3.hours, # all posts in last 3 hours 
Time.zone.now 
) 

在这里,您可以通过我们的现场也Post.by_month("January", field: :updated_at)

请参阅文档和尝试。