Создайте вставленный datetime, где фильтр, используя простую строку даты - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь вставить записи после определенной даты, предоставленной мне клиентом.

2018-06-06

Вот как я пишу запрос:

{:ok, date} = NaiveDateTime.from_iso8601(date_string)

from(
  m in query,
  where: m.inserted_at > ^date
)
  • (MatchError) нет совпадения правого значения: {: error,: invalid_format}

А когда я пытаюсь использовать простой объект Date:

** (Ecto.Query.CastError) lib / messages / search.ex: 77: значение ~D[2018-06-06] в where не может быть приведено к типу: naive_datetime в запросе

Как найти все сообщения, вставленные после этой фиктивной даты строки, которую клиент передает мне?

1 Ответ

0 голосов
/ 07 мая 2018

У вас там дата ISO 8601, а не дата / время. Вы можете преобразовать его в NaiveDateTime (с часами, минутами, секундами, установленными в 0) следующим образом:

iex(1)> date_string = "2018-06-06"
"2018-06-06"
iex(2)> ndt = NaiveDateTime.from_iso8601!(date_string <> " 00:00:00")
~N[2018-06-06 00:00:00]

Теперь вы можете использовать ndt в своем запросе, и он будет работать.

...