2011-05-30 28 views
6

我需要在Rails模型時間戳(created_atupdated_at)上查詢指定日期之後的所有記錄。當執行查詢:Rails日期

Item.where("created_at > :date OR updated_at > :date", date: "2011-05-29") 
> SELECT "items".* FROM "items" WHERE (created_at > '2011-05-29' OR updated_at > '2011-05-29') 

它包括像記錄:

attributes: 
    created_at: 2011-05-29 16:07:10.664227 
    updated_at: 2011-05-29 16:07:10.664229 

然而,這個日期不超過指定的大。任何簡單的方法來解決這個查詢?謝謝。

編輯:

我也試着這樣做:

Item.where("created_at > :date OR updated_at > :date", date: "2011-05-29 16:07:10") 

具有相同的結果,但加入秒分數郵票以及給出正確的結果。

回答

11

說你想記錄開始5月30日:

然後搜索是記錄> = 2011-05-30 00:00:00

some_date = Time.now 
Item.where("created_at >= :date OR updated_at >= :date", date: some_date.tomorrow.beginning_of_day) 
3

我認爲問題是,created_at和的updated_at是日期時間,所以如果你只通過一個日期它默認時間爲00:00:00,任何過去的事情明顯更多。所以你看到的記錄已經過去了,因爲時間越長越好。

看看你的精確度,你可以再多傳一天,我會在當天顯示任何內容,甚至更長時間顯示,或者簡單地通過小時23:59:59。

+0

'datetime'字段還需要指定小數秒嗎?謝謝! – 2011-05-30 00:22:28

+0

不,我可能只是增加1整天,或只是23:59:59都會給你足夠的精度。 – daniel 2011-05-30 22:02:13

1

不幸的是SQL不同意你:

mysql> SELECT '2011-05-30 12:00:00' > '2011-05-30'; 
+--------------------------------------+ 
| '2011-05-30 12:00:00' > '2011-05-30' | 
+--------------------------------------+ 
|         1 | 
+--------------------------------------+ 

並與日期時間比較日期時,MySQL有this to say

DATE值是通過將時間部分爲「強制轉換爲DATETIME類型00:00:00' 。

0

您可以使用我的寶石by_star來做到這一點。

Post.after(date)