创建一个inserted_at datetime,其中filter使用简单的日期字符串

时间:2018-05-07 17:29:43

标签: date elixir where ecto

我正在尝试在客户提供给我的特定日期之后插入记录。

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 :(得分:0)

您有一个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,它可以正常运行。