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

时间:2015-05-13 09:47:53

标签: timestamp elixir ecto

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

在架构部分中,我将: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}},

似乎

create_at

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

PS:关于如何定义字段~/ANDROID/lichee/linux-3.4/arch/arm/mach-sun7i ,下面的链接给了我答案

Default datetime with Ecto & Elixir

1 个答案:

答案 0 :(得分:8)

您无法像这样从erlang日期/时间元组创建%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}

(注意^)