【问题标题】:Finding records between date range查找日期范围之间的记录
【发布时间】: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


    【解决方案1】:

    你可以这样做

    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])
    

    【讨论】:

    • 这是一个很棒的提示。不知道那个。太棒了。
    • 这看起来与 OP 的要求相反。如果 date 是表中的字段,那将是完美的,但根据帖子中的文本显示,表中有 start_date 和 end_date 字段。所以这段代码并不能解决贴出的问题。
    【解决方案2】:

    您希望选择日期大于 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"
    

    【讨论】:

      【解决方案3】:

      这应该可行:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 2019-11-09
        相关资源
        最近更新 更多