Rails ActiveRecord - как получать записи между двумя датами - программирование
Подтвердить что ты не робот

Rails ActiveRecord - как получать записи между двумя датами

У меня есть в базе данных два столбца даты - from_date и to_date.

Пример:

  • from_date: 2012-09-10
  • to_date: 2012-09-30
  • today: 2012-09-13

Мне нужно будет получить все записи, если today дата находится между from_date и to_date. Как это сделать в SQL-запросе?

Если я загрузил соответствующую запись, я могу легко решить, если сегодняшняя дата находится между from_date и to_date, но я не знаю, как правильно выбрать эту запись из базы данных.

4b9b3361

Ответ 1

data = ModelName.where("today >= from_date AND today <= to_date")

Ответ 2

Отметьте Rails guide условия Range:

Client.where(created_at: (Time.now.midnight - 1.day)..Time.now.midnight)

Это создаст следующий SQL:

SELECT * FROM clients WHERE (clients.created_at BETWEEN '2008-12-21 00:00:00' AND '2008-12-22 00:00:00')

Ответ 3

вы можете использовать следующее:

Data = Model.where("date(now()) between from_date and to_date")

Ответ 4

data = ModelName.find(:all, :conditions => "today >= from_date and today <= to_date")

Ответ 5

Это должно сделать трюк.

today = Date.today

data = ModelName.where("from_date <= ? AND to_date >= ?", today, today)

Ответ 6

Безопасный и простой способ сделать это:

Model.where(':date BETWEEN from_date AND to_date', date: Date.current)

Ответ 7

Вы можете использовать нижний камень для поиска записей между датами,

Этот драгоценный камень довольно прост в использовании и более ясен По звездам я использую этот драгоценный камень, а API более понятный и документация также хорошо объяснена.

ModelName.between_times(Time.zone.now - 3.hours,  # all posts in last 3 hours
                  Time.zone.now)

Здесь вы также можете передать наше поле ModelName.by_month("January", field: :updated_at)

Пожалуйста, просмотрите документацию и попробуйте.

Ответ 8

Хорошо, после долгого поиска в google, ищущем "путь рельсов", чтобы сделать МЕЖДУ с двумя полями даты и переменной, наиболее приближенное решение, которое я нашел, создает ваш собственный scope, чтобы сделать это.

в приложении ApplicationRecord:

class ApplicationRecord < ActiveRecord::Base

  scope :between_fields, -> (value, initial_date, final_date) { 
    where "('#{value}' BETWEEN #{initial_date} AND #{final_date})"
   }

end

Итак, теперь, где вам нужно сделать между вами, вы можете:

@clients = Client.between_fields(params[:date], :start_date, :final_date)
# SELECT * FROM clients WHERE ('2017-02-16 00:00:00' BETWEEN start_date AND final_date)

Вы можете комбинировать его с другими "where", чтобы сделать ваш запрос как можно более конкретным.