我在我的数据库中有一个属性,我保存记录创建日期。 保存的日期采用以下格式:
2013/06/18 19:03:24
我只需要搜索日期,我对时间不感兴趣
我尝试过这种模式,但它不起作用:
Report.find_all_by_created_at("2013-06-18").each do |r| %>
[...]
end
答案 0 :(得分: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)
答案 1 :(得分: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'
答案 2 :(得分:0)
可能不是最好的解决方案,但你可以做到:
Report.where("created_at >= ? and created_at < ?","2013-06-18","2013,06-19").each do |r|
[...]
end
答案 3 :(得分:0)
看起来您正在将其作为DateTime
收集,并且您可能可以使用to_date()
方法将其更改为可以搜索的Date
对象。
http://api.rubyonrails.org/classes/DateTime.html#method-i-to_date
答案 4 :(得分:0)
你可以在sql查询中使用匹配器
Report.where("created_at LIKE '2013-06-18%'")
或者查看Squeel
gem,它可以像ruby一样调用SQL函数语法,然后你可以使用thati生成查询的东西
WHERE cast(created_at as date) = '2013-06-18'