代码之家  ›  专栏  ›  技术社区  ›  Bargain23

按月份访问日期时间字段

  •  0
  • Bargain23  · 技术社区  · 7 年前
    defp query_by(query, %{"min_end_date_month" => min_end_date_month} = params) do
      query = from(q in query, where: q.end_date.month <= ^min_end_date_month)
    
      query_by(query, Map.delete(params, "min_end_date_month"))
    end
    

    上面的查询函数返回此错误: (Ecto.Query.CompileError) q.start_date().year() is not a valid query expression . 但是,在iex控制台中,我通常可以 some_record.end_date.month 自从 month 是有效密钥。我做错什么了?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dogbert    7 年前

    Date 结构,它允许您使用 .year , .month ,等等。但是查询是由数据库执行的,您不能使用 . . 有一些特定于数据库的函数可以从日期值中提取这些值。假设您使用的是PostgreSQL,您可以使用 date_part :

    query = from(q in query, where: fragment("date_part('month', ?)", q.end_date) <= ^min_end_date_month)