2017-01-30 6 views
0

範囲内の日付を比較する正しい方法は、マイナス演算子を使用し、日付がEctoよりも大きいかどうかを比較することですか?Ectoで日付を比較する正しい方法は何ですか

def has_valid_date_range(query) do 
    from ct in query, 
     where: (ct.end_date - from_now(0, "day")) > 0, 
     where: (ct.end_date - from_now(0, "day")) <= ct.due_notice 
    end 

END_DATEマイナス今日は今日0とEND_DATEのマイナスよりも大きい場合、すべての行を返す必要があり、このクエリの結果は

due_noticeよりも低くなっている。しかし、それは私にエラーを返し

** (Ecto.Query.CompileError) ct.end_date() - from_now(0, "day") is not a valid query expression.

+0

正確にここで計算しようとしているものは何ですか? 'from_now'は私が知る限りEcto DSLの比較演算子でのみ動作します。あなたはおそらく 'datetime_add'を探しています。 – Dogbert

+0

私はドキュメントを読んでいましたが、 'from_now'を' -'関数と比べて見ませんでした。おそらくあなたは正しいでしょう。このクエリを作成する別の方法はありますか? –

+0

ここに「due_notice」のタイプは何ですか?あなたは何を計算しようとしていますか? – Dogbert

答えて

2

コメント欄でわかったように、end_dateが現在の時刻の後で、現在の時刻からdue_notice日前のレコードを選択するとします。そのためには、次のクエリを使用できます:

where: ct.end_date > from_now(0, "day") and 
     ct.end_date <= datetime_add(ct.end_date, ct.due_notice, "day") 
関連する問題