2017-04-08 85 views
1

我正在處理我的應用程序的統計信息頁面,並試圖按日期查詢數據。Ecto/Elixir,我如何按日期查詢?

來獲得日期範圍,我用Calendar.Date

date_range = Date.days_after_until(start_date, end_date, true) 
|> Enum.to_list 

,並返回日期的最新名單,每個日期的樣子"2017-04-07"。所以我從date_range得到的日期,我試圖查詢,但它觸發像下面的錯誤。

where cannot be cast to type Ecto.DateTime in query: from o in Myapp.Order, where: o.created_date >= ^~D[2017-04-07]

對於訂單created_date場,我做了場就是這樣, field :created_date, Ecto.DateTime

如果我想按日期查詢,我該如何查詢它?

提前致謝。

+0

什麼是你跑了準確的查詢? – Dogbert

回答

6

它看起來像你試圖比較日期和日期時間。您需要將其中一個投射到另一個類型,以便比較可以工作,例如轉換日期時間在數據庫中的日期:

date = ~D[2017-01-01] 
from p in Post, where: fragment("?::date", p.inserted_at) >= ^date 

或轉換藥劑DateNaiveDateTime

{:ok, datetime} = NaiveDateTime.new(date, ~T[00:00:00]) 
from p in Post, where: p.inserted_at >= ^datetime 

如果你有開始和結束日期,你只需要添加一個and要麼。您不需要使用任何庫生成整個日期列表。

from p in Post, 
    where: fragment("?::date", p.inserted_at) >= ^start_date and 
     fragment("?::date", p.inserted_at) <= ^end_date 

from p in Post, 
    where: p.inserted_at >= ^start_datetime and 
     p.inserted_at <= ^end_datetime 
+0

謝謝!在我將日期更改爲日期時間後,它可以正常工作! –