2016-09-15 34 views
1

有人可以解釋這一點嗎?有效記錄,結果插圖

Post.where(:p_date => ((Time.now - 7.days)..(Time.now))).count 
-> 4507 
Post.where(:p_date => ((Time.now - 7.days).beginning_of_day..(Time.now).end_of_day)).count 
-> 4794 

雖然p_date日期類型無時間。

謝謝

+0

什麼是您的時區設置? –

+0

如果你做'Post.where(pdate:Date.today - 7.days).count'這是否等於差異? – SteveTurczyn

+0

時區格林威治標準時間+3 –

回答

1

如果p_date是一個日期列,通過日期,查詢

Post.where(p_date: (7.day.ago.to_date .. Date.today)).count 

如果在時間對象通過使用這種查詢

SELECT COUNT(*) FROM `posts` WHERE (`posts`.`p_date` BETWEEN '2016-09-08' AND '2016-09-15') 

,數據庫會自動比較0:00:00的時間(至少在MySQL和Postgres),這是你從哪裏得到你的差異。

+0

我使用的是Postgres,這是來自活動記錄的查詢詳細信息,第一個SELECT COUNT(*)FROM「posts」WHERE(「posts」。「p_date」BETWEEN'2016-09-08 15:33:24.390596'AND'2016-09-15 15:33:24.390711') and the s第二個 SELECT COUNT(*)FROM「posts」WHERE(「posts」。「p_date」BETWEEN'2016-09-07 21:00:00.000000'AND'2016-09-15 20:59:59.999999') –

+0

it似乎有一天添加到第二個查詢 –

+0

正確,所以postgres也將日期對象轉換爲時間戳爲00:00:00的日期時間,因爲你的兩個查詢涉及兩個不同的時間範圍,你會得到不同的答案。 由於該列是日期,因此如果您將日期用作範圍,則會得到一致且正確的答案。 –