Экто запросить разницу между двумя датами в минутах - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть запрос, в котором я хотел бы найти Booking записей, которые имеют более 1500 минут между моментом их добавления и началом бронирования.

Идея такова:

booking.start - booking.inserted_at > 1500 minutes

Количество минут может варьироваться, поэтому это переменная (тип integer). В настоящее время я пытаюсь это:

# 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)

1 Ответ

1 голос
/ 26 февраля 2020

Это странно, но я могу подтвердить, что параметр неправильно обрабатывается Ecto.Query.API.fragment/1, если этот путь пройден.

Вот обходной путь.

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