elixir, ecto, 在 where 子句中比较时间

elixir, ecto, compare time in the where clause

当我在 Elixir 中使用 ecto 创建查询时,我不太确定如何在 'where' 子句中比较时间。

在架构部分,我将 create_at 声明为 :datetime

 schema "tenant" do
   field :id, :integer
   field :created_at, :datetime
   # timestamps([{:inserted_at,:created_at}])

 end

查询部分类似于

def sample_query do
  query = from t in Tenant,
    where: t.id == 123,
    where: t.created_at == %Ecto.DateTime{{2015, 4, 27}, {10, 8, 42}},
    select: t
end

看来

where: t.created_at <= %Ecto.DateTime{{2015, 4, 27}, {10, 8, 42, 0}},

部分格式错误。有人可以告诉我如何以正确的方式做到这一点吗?

PS:关于如何定义字段create_at,下面的link给了我答案

您不能像那样从 erlang date/time 元组创建 %Ecto.DateTime{} 结构。你需要做的:

def sample_query do
  query = from t in Tenant,
    where: t.id == 123,
    where: t.created_at == ^Ecto.DateTime.from_erl({{2015, 4, 27}, {10, 8, 42, 0}}),
    select: t
end

如果您的时间值来自其他地方并且您想自己创建 %Ecto.DateTime{} 结构,您可以这样做:

^%Ecto.DateTime{year: 2015, month: 4, day: 27, hour: 10, min: 8, sec: 42, usec: 0}

(注意^)