【发布时间】:2023-03-26 22:45:01
【问题描述】:
我正在尝试查找开始和结束日期在特定日期范围内的记录。日期是随机的, :start_date 和 :end_date 是价格实体的属性。
date = Time.now
record_i_want = Price.where(date => :start_date .. :end_date)
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby activerecord
我正在尝试查找开始和结束日期在特定日期范围内的记录。日期是随机的, :start_date 和 :end_date 是价格实体的属性。
date = Time.now
record_i_want = Price.where(date => :start_date .. :end_date)
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby activerecord
你可以这样做
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])
【讨论】:
您希望选择日期大于 start_date 且小于 end_date 的行。您可以在调用 where 时指定适当的 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,请对 >= 和
":date >= start_date AND :date < end_date"
【讨论】:
这应该可行:
def get_record_by_date(date)
Price.where([start_date.to_i < date.to_i] && [end_date.to_i > date.to_i])
end
【讨论】: