在2个日期之间搜索

问题描述 投票:0回答:2

我想在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
ruby-on-rails ruby sqlite search
2个回答
0
投票

确保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)

0
投票

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

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

它就像这个on-rails控制台一样触发,

Request Load (1.9ms)  SELECT "requests".* FROM "requests" WHERE (DATE(created_at) > '2019-03-03' AND DATE(completed_at) < '2019-03-09')
© www.soinside.com 2019 - 2024. All rights reserved.