mat*_*atQ 3 sql postgresql activerecord ruby-on-rails date
我收到这个参数: param[:date] = '2017-03-04'
我的数据库中的列是 created_at ,格式如下: '2017-01-01 09:21:23'
当我执行此查询时
Mymodel.where(created_at: params[:date]) 
它返回一个空数组,由于没有经过时间,这是逻辑
我需要与参数日期相对应的所有行。
我怎样才能做到这一点?在这种情况下时间并不重要,我只需要日期。
我使用 postgres 作为数据库。
我需要选择例如特定日期的 All Sell 并且要搜索的列是 created_at。
这是一个类型强制问题。由于该created_at字段包含日期和时间,因此您的日期将被转换2017-03-04 00:00:00为查询。任何与该时间戳不完全匹配的内容都将被排除。
有两种方法可以解决这个问题。
将您的日期转换为Range 对象。ActiveSupportDate#all_day为这个用例提供了帮助程序。
date = Date.parse(params[:date])
MyModel.where(created_at: date.all_day)
由于Date::parse在解析失败时抛出异常,现实世界的实现必须考虑到这一点
my_models = begin
  date = Date.parse(params[:date])
  MyModel.where(created_at: date.all_day)
rescue ArgumentError
  MyModel.all
end
您可以将您的created_at字段转换为date仅匹配日期部分。
MyModel.where("created_at::date = ?", params[:date])
| 归档时间: | 
 | 
| 查看次数: | 2684 次 | 
| 最近记录: |