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
)
我有一个查询,我想在其中查找 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
)