0

У меня есть DateTime в поле at и длительность нескольких минут в поле minutes. Я хочу получить все записи, где текущее время находится в пределах at и at + minutes. Что-то вроде:Можно использовать поле в запросе ActiveRecord?

SpecialEvent.where(at: (DateTime.now - 120.minutes)..DateTime.now) 

За исключением Я предполагаю, что продолжительность 120.minutes. Точное количество минут для каждого SpecialEvent находится в поле minutes. Но я не знаю, как использовать это minutes поле в запросе ...

ответ

-2

Вы можете форматировать ваш запрос как:
SpecialEvent.where(at: (DateTime.now - 120.minutes)..DateTime.now, minutes: '<your search value>')

+0

Спасибо, но не то, что я искал –

1

некоторых баз данных (включая MySQL) вспомогательные функции в SQL для выполнения расчетов с даты. Это необходимо для эффективного расчета временной метки на основе данных внутри базы данных. Таким образом, вам нужно сгенерировать правильный SQL для вашего конкретного колорита базы данных. Пример ниже должен работать для MySQL. Если вы используете другую базу данных, вам, вероятно, придется адаптировать ее к доступным функциям даты.

SpecialEvent.where(['at >= :now - INTERVAL minutes MINUTE AND at <= :now', now: DateTime.now]) 

Это эффективно генерирует следующий SQL запрос (хотя и с буквальным значением даты вместо NOW():

SELECT * FROM special_events WHERE at >= NOW() - INTERVAL minutes MINUTE AND at <= NOW(); 
+0

я использую PostgreSQL ... Я выясню, как это сделать в PostgreSQL. Любопытно, зачем заключить условие where в квадратных скобках? –

+0

PostgreSQL имеет аналогичный механизм. К сожалению, я не могу заставить его работать с полем 'minutes'. работайте, если у меня есть жестко закодированное число, например 'INTERVAL '30 MINUTES''. –

Смежные вопросы