【问题标题】:Ecto query the difference between two dates in minutesEcto 以分钟为单位查询两个日期之间的差异
【发布时间】:2020-02-26 16:30:27
【问题描述】:

我有一个查询,我想在其中查找从插入时间到预订开始时间超过 1500 分钟的 Booking 记录。

想法是这样的:

booking.start - booking.inserted_at > 1500 minutes

分钟数可能会有所不同,因此这是一个变量(整数类型)。目前我正在尝试这个:

# this will be a dynamic integer
mins_diff = 1500

from(b in Booking)
|> where(
  [b],
  fragment("? - ? > interval '? minutes'", b.start, b.inserted_at, ^mins_diff)
)
|> Repo.all()

但它会抛出错误:

** (ArgumentError) parameters must be of length 1 for query %Postgrex.Query{}
# rest of error truncated (because it is massive)

【问题讨论】:

    标签: postgresql elixir ecto


    【解决方案1】:

    这很奇怪,但如果以这种方式传递,我可以确认Ecto.Query.API.fragment/1 未正确处理参数。

    这是一种解决方法。

    from b in Booking,
         where: fragment(
                  "? - ? > ? * interval '1 minute'",
                  b.start,
                  b.inserted_at,
                  ^mins_diff
                )
    

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 2011-11-29
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 2020-06-08
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多