0

我在我的数据库中有一个属性,我在其中保存记录创建日期。保存的日期具有以下格式:

2013/06/18 19:03:24

我只需要搜索日期,我对时间不感兴趣

我尝试过这种模式,但它不起作用:

Report.find_all_by_created_at("2013-06-18").each do |r|  %> 
  [...]
 end 
4

5 回答 5

2

鉴于这created_at是一个 Rails 生成的列,您不能真正并且只是在日期创建。数据库created_at中的原因保存为时间戳(或日期时间),因此 6 月 18 日创建的记录可能具有从2013-06-18 00:00:00到的值2013-06-18 23:59:59

因此,如果您想选择在特定日期创建的所有对象,您应该执行类似的操作

Report.where('created_at >= ? AND created_at <= ?, Date.new(2013,6,18).beginning_of_day, Date.new(2013,6,18).end_of_day)
于 2013-06-19T13:07:28.910 回答
1

您可以将范围传递到:

date = Date.new(2013,6,18)
Report.where(created_at: date.beginning_of_day..date.end_of_day)

这将创建一个 SQL 语句,如:

SELECT `reports`.* FROM `reports` WHERE `reports`.`created_at` BETWEEN '2013-06-18  00:00:00' AND '2013-06-18 23:59:59'
于 2013-06-19T13:35:36.690 回答
0

可能不是最好的解决方案,但你可以这样做:

Report.where("created_at >= ? and created_at < ?","2013-06-18","2013,06-19").each do |r|
  [...]
end
于 2013-06-19T13:06:33.780 回答
0

看起来您正在收集它,DateTime并且您可能能够使用该to_date()方法将其更改为Date可搜索的对象。

http://api.rubyonrails.org/classes/DateTime.html#method-i-to_date

于 2013-06-19T13:09:06.250 回答
0

您可以在 sql 查询中使用 like 匹配器

Report.where("created_at LIKE '2013-06-18%'")

或者看看Squeel它可以用类似ruby的语法调用SQL函数的gem,然后你可以使用一些我会生成查询的东西

WHERE cast(created_at as date) = '2013-06-18'
于 2013-06-19T13:10:11.553 回答