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}
(注意^)
当我在 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}
(注意^)