datetime – Ecto/Elixir,我如何按日期查询?

我正在处理我的应用程序的统计页面,并尝试按日期查询数据.

要获取日期范围,我使用Calendar.Date

date_range = Date.days_after_until(start_date, end_date, true)
|> Enum.to_list

它返回日期的日期列表,每个日期看起来像“2017-04-07”.因此,从date_range得到的日期,我试图查询,但它会触发如下错误.

无法转换为在查询中输入Ecto.DateTime:来自Myapp.Order中的o,
 其中:o.created_date> = ^ ~D [2017-04-07]

对于Order的created_date字段,我创建了这样的字段,
field:created_date,Ecto.DateTime.

如果我想按日期查询,我该如何查询?

预先感谢.

最佳答案
看起来您正在尝试比较日期和日期时间.您需要将其中一个投射到另一个类型,以便进行比较,例如将数据库中的日期时间转换为日期:

date = ~D[2017-01-01]
from p in Post, where: fragment("?::date", p.inserted_at) >= ^date

或者将Elixir日期转换为NaiveDateTime:

{:ok, datetime} = NaiveDateTime.new(date, ~T[00:00:00])
from p in Post, where: p.inserted_at >= ^datetime

如果您有开始日期和结束日期,则只需要添加和.您不需要使用任何库生成整个日期列表.

from p in Post,
  where: fragment("?::date", p.inserted_at) >= ^start_date and
         fragment("?::date", p.inserted_at) <= ^end_date

要么

from p in Post,
  where: p.inserted_at >= ^start_datetime and
         p.inserted_at <= ^end_datetime

转载注明原文:datetime – Ecto/Elixir,我如何按日期查询? - 代码日志