王志軍*_*王志軍 6 timestamp elixir ecto
当我在Elixir中使用ecto创建查询时,我不确定如何在'where'子句中比较时间.
在模式部分我声明create_at为:datetime
schema "tenant" do
field :id, :integer
field :created_at, :datetime
# timestamps([{:inserted_at,:created_at}])
end
Run Code Online (Sandbox Code Playgroud)
而查询部分就像
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
Run Code Online (Sandbox Code Playgroud)
好像是
where: t.created_at <= %Ecto.DateTime{{2015, 4, 27}, {10, 8, 42, 0}},
部分形式错误.有人可以告诉我如何以正确的方式做到这一点吗?
PS:关于如何定义字段create_at,下面的链接给了我答案
你不能%Ecto.DateTime{}像这样从erlang日期/时间元组创建一个结构.你需要这样做:
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
Run Code Online (Sandbox Code Playgroud)
如果您的时间值来自其他地方并且您想自己创建%Ecto.DateTime{}结构,则可以执行以下操作:
^%Ecto.DateTime{year: 2015, month: 4, day: 27, hour: 10, min: 8, sec: 42, usec: 0}
Run Code Online (Sandbox Code Playgroud)
(注意^)