【发布时间】:2018-08-01 20:05:28
【问题描述】:
正如标题所问,如何在查询中包含日期范围?
例如,假设我有一个名为VisitToGrandma 的模型,它有一个名为visit_date 的字段。现在,我想查找上个月发生的所有对祖母的访问。
这是我正在尝试的:
VisitToGrandma.where("? @> visit_date", (1.month.ago..Time.now))
但是,这会产生查询:
SELECT "visits_to_grandmas".* FROM "visits_to_grandmas" WHERE ('2018-07-01','2018-07-02','2018-07-03','2018-07-04','2018- 07-05','2018-07-06','2018-07-07','2018-07-08','2018-07-09','2018-07-10','2018-07- 11','2018-07-12','2018-07-13','2018-07-14','2018-07-15','2018-07-16','2018-07-17' ,'2018-07-18','2018-07-19','2018-07-20','2018-07-21','2018-07-22','2018-07-23',' 2018-07-24','2018-07-25','2018-07-26','2018-07-27','2018-07-28','2018-07-29','2018- 07-30','2018-07-31','2018-08-01' @> visit_date)
参数化的正确方法是什么?
是的,我知道这个虚构的例子,我可以只使用开始和结束日期并使用BETWEEN 或其他一些运算符来执行此操作,而不使用实际的日期范围,但这不是我想要的询问。
编辑指出这个问题与the other question 有何不同:
这个问题只是关于在一个范围内查找一个日期,我的问题是询问如何实际参数化一个范围对象,以便可以使用所有 postgresql 的日期范围运算符。
【问题讨论】:
-
@jvillian,是的,它们是非常相似的问题,但是那个问题的上下文是“没有结果出现”,而我的上下文是“它正在产生一个不正确的查询”。 ¯\_(ツ)_/¯
-
认识到上下文的差异,该方法是否适用?
VisitToGrandma.where(visit_date: 1.month.ago..Time.now)? -
@jvillian,对于这个虚构的例子,是的,但我需要知道如何包含日期范围才能使用所有 postgresql 的日期范围运算符,而不仅仅是查找日期是否在此范围内跨度>
-
为我的困惑道歉,但你的意思是当字段类型是 postgres
daterange?
标签: ruby-on-rails postgresql ruby-on-rails-5 rails-activerecord