【问题标题】:Rails sql query difference between two dates more then 2 weeksRails sql查询两个日期之间的差异超过2周
【发布时间】:2017-03-22 09:55:21
【问题描述】:

我有一个包含 2 列“date_from”和“date_to”的表。我必须进行查询,该查询应返回“date_to”-“date_from”==“2 周”的结果。

类似这样的:

User.where('date_to - date_from == 2.weeks').

【问题讨论】:

  • 您想要日期差大于或等于 2 周的记录吗?在标题中你想要more,有问题你写==...
  • 我尝试了间隔,但没有成功。认为mysql可能没有与@AndreyDeineko链接的帖子相同的语法或支持。我需要 == 2 周。
  • 我正是这样做的:where(%q{date_to - date_from < interval '13 years'}) 它给了我错误:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法')' 在第 1 行",我完全不明白。

标签: mysql sql ruby ruby-on-rails-5


【解决方案1】:

在用户上定义:

def self.two_weeks
   where(date_to: date_from + 2.weeks)
end

那你可以直接拨打User.two_weeks

如果您愿意,也可以作为范围完成:

scope :two_weeks, -> { where(date_to: date_from + 2.weeks) }

无论如何,最好将这些东西保留在模型上,以便在需要调整时可以在一个地方进行更改

【讨论】:

  • 我没有 date_from 变量,查询必须没有任何参数。
  • @Choki1708 是 date_from 不是用户的属性?如果是,那么它应该是可调用的,如我的示例所示。如果没有,那么如果不传递它就不可能运行您的查询
  • 但是这样 date_from 是一个变量。这就像这样做:user_id = 1 User.where(id: user_id),我需要像 @Ursus 这样的东西。还是我误会了什么?
  • @Choki1708,当您调用此查询时,您只需输入User.two_weeks - 仅此而已。您不必声明任何变量。只要你把方法放在你的用户模型上
【解决方案2】:

这应该可以工作,至少对于 mysql 来说

User.where('1 + DATEDIFF(date_to, date_from) >= 14')

【讨论】:

  • DATEDIFF(date_to, date_from) < 13 应该可以工作
  • 是的,我知道。这只是为了清楚起见。
  • 非常感谢。我认为这就是答案,必须彻底测试它,但它给出的结果似乎是有效的。
  • 我的荣幸先生 :)
  • 顺便说一句,@Ursus 在这里是“1 + ...”,还是出于某种原因,或者你只是为了好玩?
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多