查找日期范围之间的记录

时间:2014-03-28 15:06:12

标签: ruby-on-rails ruby activerecord

我正在尝试查找特定日期的开始和结束日期范围的记录。日期是随机的,并且:start_date和:end_date是价格实体的属性。

date = Time.now
record_i_want = Price.where(date => :start_date .. :end_date)

谢谢。

3 个答案:

答案 0 :(得分:9)

你可以简单地做

Price.where(:date => start_date..end_date)

这将产生以下SQL(开始和结束日期 - '2014-03-27','2014-03-28')

SELECT `prices`.* FROM `prices` WHERE (`prices`.`date` BETWEEN '2014-03-27' AND '2014-03-28')

修改 意识到这是您正在寻找的查询。谢谢,Coenwulf指出了它

Price.where(['start_date < ? AND end_date > ?', date, date])

答案 1 :(得分:2)

您希望选择日期大于start_date且小于end_date的行。您可以在调用中指定参数化的相应SQL where子句,如下所示:

Price.where([":date >= start_date AND :date <= end_date", {date: Date.today})

这将为您提供匹配的所有价格。如果你知道你只得到一个,你可以先打电话给它。

Price.where([":date >= start_date AND :date <= end_date", {date: Date.today}).first

如果要从结果中排除start_date和/或end_date,请对&gt; =和&lt; =进行适当的调整。例如,如果价格从start_date开始有效但通过end_date无效,则可以将该子句更改为:

":date >= start_date AND :date < end_date"

答案 2 :(得分:-1)

这应该有效:

def get_record_by_date(date)
  Price.where([start_date.to_i < date.to_i] && [end_date.to_i > date.to_i])
end