2012-05-28 64 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)

請參閱文檔和嘗試。