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