2017-01-30 3 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 и датой_окончания минус сегодня ниже, чем 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")