天才!
所以在我的项目中,我试图使用查询按时间戳搜索我的单表数据库,其格式如下:“ 2018-05-01 00:28:43”。 在我的请求中,我想忽略时间,并显示所有具有所选日期的结果作为时间戳。
现在我仍在学习,尝试了很多搜索,但无法给出答案。这是我的位置:
indptr
答案 0 :(得分:1)
我会做这样的事情:
def index
if params[:query].present?
# gives a date without a time
date = Date.parse(params[:query])
@reports = Report.where(created_at: date..(date + 1.day))
else
@reports = Report.all
end
end
答案 1 :(得分:0)
您可以尝试以下操作:
def index
if params[:query].present?
@reports = Report.where(created_at: (Time.new(params[:query]).beginning_of_day()..Time.new(params[:query]).end_of_day()).all
else
@reports = Report.all
end
end
如果需要格式化结果,可以使用all.map()解析列
Report.where(created_at: (Time.new(params[:query]).beginning_of_day()..Time.new(params[:query]).end_of_day()).all.map{|report| report.created_at = Time.new(report.created_at).your_format }
答案 2 :(得分:0)
使用SQL date()
函数。
def index
@date = Date.parse(params[:query]) rescue nil
if @date
@reports = Report.where("date(created_at) = ?", @date)
else
@reports = Report.all
end
end
请勿将params[:query]
作为where
子句的参数直接传递,首先将其解析为Date
对象,以确保它实际上是一个日期。
答案 3 :(得分:0)
您可以尝试以下方法:
def index
if params[:query].present?
date = Date.parse(params[:query])
@reports = Report.where(created_at: date.midnight..date.end_of_day)
else
@reports = Report.all
end
end