Ecto 查询两个日期的相差分钟数

Ecto query the difference between two dates in minutes

我有一个查询,我想在其中查找 Booking 记录,这些记录在插入和预订开始之间间隔超过 1500 分钟。

思路是这样的:

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)

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

这是一个解决方法。

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