我在数据库中有两个日期列 - from_date
和to_date
。
示例:
from_date
: 2012-09-10 to_date
: 2012-09-30 today
: 2012-09-13 如果today
的日期介于from_date
和to_date
之间,我需要提取所有记录。如何在SQL查询中执行此操作?
如果我已加载相应的记录,我可以轻松决定,如果今天的日期介于from_date
和to_date
之间,但我不知道,如何从数据库中直接获取这些记录。< / p>
答案 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
您可以将其与“其他人”结合使用,以根据需要进行查询。