我有一个拥有Checkin
型号的rails应用。我想查找当天特定时间范围内的所有记录。如何编写where
以获取在下午12点到下午4点半之间创建的所有记录?
答案 0 :(得分:44)
@ x1a4的回答应该对你有好处,但你可以使用范围以更易读,更简洁的方式做到这一点。
Checkin.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")
以创建时间。
答案 1 :(得分: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
答案 2 :(得分:0)
您可以使用以下gem来查找日期之间的记录,
这gem非常容易使用且更加清晰[By star] [1]。我正在使用这个gem,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)
请参阅文档并试用。