使用查询搜索时间戳,但忽略时间

时间:2018-09-12 16:07:40

标签: sql ruby-on-rails ruby

天才!

所以在我的项目中,我试图使用查询按时间戳搜索我的单表数据库,其格式如下:“ 2018-05-01 00:28:43”。 在我的请求中,我想忽略时间,并显示所有具有所选日期的结果作为时间戳。

现在我仍在学习,尝试了很多搜索,但无法给出答案。这是我的位置:

indptr

4 个答案:

答案 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