Rails ActiveRecord - 如何在两个日期之间获取记录

时间:2012-09-13 10:38:11

标签: sql ruby-on-rails postgresql activerecord

我在数据库中有两个日期列 - from_dateto_date

示例:

  • from_date 2012-09-10
  • to_date 2012-09-30
  • today 2012-09-13

如果today的日期介于from_dateto_date之间,我需要提取所有记录。如何在SQL查询中执行此操作?

如果我已加载相应的记录,我可以轻松决定,如果今天的日期介于from_dateto_date之间,但我不知道,如何从数据库中直接获取这些记录。< / p>

8 个答案:

答案 0 :(得分:45)

检查范围条件Rails guides

Client.where(created_at: (Time.now.midnight - 1.day)..Time.now.midnight)

这将产生以下SQL:

SELECT * FROM clients WHERE (clients.created_at BETWEEN '2008-12-21 00:00:00' AND '2008-12-22 00:00:00')

答案 1 :(得分:20)

data = ModelName.where("today >= from_date AND today <= to_date")

答案 2 :(得分:7)

你可以像这样使用:

{{1}}

答案 3 :(得分:5)

data = ModelName.find(:all, :conditions => "today >= from_date and today <= to_date")

答案 4 :(得分:3)

这应该可以解决问题。

today = Date.today

data = ModelName.where("from_date <= ? AND to_date >= ?", today, today)

答案 5 :(得分:2)

安全且简便的方法是:

Model.where(':date BETWEEN from_date AND to_date', date: Date.current)

答案 6 :(得分:1)

您可以使用以下gem来查找日期之间的记录,

这个宝石很容易使用,更清晰By star使用这个宝石和API更清晰,文档也很好地解释。

ModelName.between_times(Time.zone.now - 3.hours,  # all posts in last 3 hours
                  Time.zone.now)

您可以在此处传递我们的字段ModelName.by_month("January", field: :updated_at)

请参阅文档并试用。

答案 7 :(得分:1)

好的,经过长时间搜索谷歌寻找“导航方式”与两个日期字段和变量进行BETWEEN后,我找到的最近似的解决方案是创建自己的scope来做到这一点。 / p> ApplicationRecord中的

写道:

"TypeError: unsupported operand type(s) for +: 'float' and 'list'"

现在,无论你需要做什么,你都可以做到:

class ApplicationRecord < ActiveRecord::Base

  scope :between_fields, -> (value, initial_date, final_date) { 
    where "('#{value}' BETWEEN #{initial_date} AND #{final_date})"
   }

end

您可以将其与“其他人”结合使用,以根据需要进行查询。