【问题标题】:Search between 2 dates在 2 个日期之间搜索
【发布时间】:2019-07-28 04:30:21
【问题描述】:

我正在尝试在 2 个日期之间进行搜索。我创建了一个带有 2 个字段的高级搜索表单,date_fromdate_to。我想使用这些字段在 created_at 和 completed_at 的日期范围之间进行搜索。

我写了一个查询,但我得到了空白结果(没有条目):

def search_requests
requests = Request.all

requests = requests.where("created_at > ? AND completed_at < ?", date_from, date_to)
requests = requests.where(["title LIKE ? OR description LIKE ?", "%#{keywords}%", "%#{keywords}%"]) if keywords.present?
requests = requests.where(["incomplete LIKE ?", incomplete]) if incomplete.present?

return requests
end

【问题讨论】:

  • @sawa 我想知道在 2 个日期字段之间执行此搜索的正确语法
  • date_fromdate_to 究竟来自哪里? TimeDate 或只是 String 的两个实例?
  • 它们是刚刚为搜索表单创建的日期时间字段类型。 @spickermann
  • 你能分享一个示例请求的日志条目吗?尤其是浏览器传入的参数和Rails生成的SQL查询字符串?

标签: ruby-on-rails ruby sqlite search


【解决方案1】:

确保date_fromdate_todate 类型,否则将其转换为初始日期

#date_to = date_to.to_date
#date_from =  date_from.to_date

查询-

requests = requests.where("created_at::date >= ? AND completed_at::date < ?", date_from, date_to)

或者

requests = requests.where("created_at >= ? AND completed_at < ?", date_from.beginning_of_day, date_to.end_of_day)

【讨论】:

  • 谢谢你,但我都得到了错误。对于第一个问题,我遇到了 :: 问题,第二个问题没有 regcongize begin_of_day 和 end_of_day。当我删除这些时,我没有得到任何错误,但没有显示结果。
  • 我还可以确认它们都是日期字段。谢谢
  • @kush 你能展示一下你是如何形成 date_to 和 date _from 的吗?
  • 确定我会用完整的语法更新问题谢谢@gabbar
  • @Kush 我还是看不出你是如何形成date_fromdate_to 的?这是从哪里来的?
【解决方案2】:

您可以将日期类型转换为date 格式并使用如下:

requests = requests.where("DATE(created_at) > ? AND DATE(completed_at) < ?", date_from, date_to)

它像这样的在线控制台触发,

Request Load (1.9ms)  SELECT "requests".* FROM "requests" WHERE (DATE(created_at) > '2019-03-03' AND DATE(completed_at) < '2019-03-09')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多