【问题标题】:SELECTing all ActiveRecord instances where date difference is smaller than X hours选择日期差小于 X 小时的所有 ActiveRecord 实例
【发布时间】:2016-08-25 21:48:44
【问题描述】:

我有一个带有两个 DateTime 字段的 Rails 4 ActiveRecord 模型:dt1dt2

我如何检索此模型的所有实例,其中dt2dt1 之后小于 X(例如 18)小时?

【问题讨论】:

  • Model.where('dt2 < ?', dt1 - x.hours) ?
  • @kiddorails:问题是dt1 每行可能不同。它不是适用于每一行的固定值。 IE。对于每一行,我们需要检测其自己的dt1与其自己的dt2之间的时间差。
  • 明白你的意思 :) 我设法用 AREL 做到了,但似乎 Mathias 已经在下面提出了更好的方法 :)

标签: sql ruby-on-rails ruby-on-rails-4 activerecord


【解决方案1】:

试试这个:

Model.where(%q{ dt2 - dt1 < interval '18 hours' })

18 hours 可以是您通过参数动态分配的变量。

dt_diff = '22 days' # or 18 hours or 3 years
Model.where(%q{ "dt2 - dt1 < interval '#{dt_diff}'" })

【讨论】:

  • 只是一个小修正:要实际将dt_diff 注入查询中,您必须这样做:Mode.where("dt2 - dt1 &lt; interval '#{dt_diff}'")
  • 对了,忘了字符串插值。对不起;)我会添加它。
猜你喜欢
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
相关资源
最近更新 更多