Ответ 1
data = ModelName.where("today >= from_date AND today <= to_date")
У меня есть в базе данных два столбца даты - from_date
и to_date
.
Пример:
from_date
: 2012-09-10to_date
: 2012-09-30today
: 2012-09-13Мне нужно будет получить все записи, если today
дата находится между from_date
и to_date
. Как это сделать в SQL-запросе?
Если я загрузил соответствующую запись, я могу легко решить, если сегодняшняя дата находится между from_date
и to_date
, но я не знаю, как правильно выбрать эту запись из базы данных.
data = ModelName.where("today >= from_date AND today <= to_date")
Отметьте 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')
вы можете использовать следующее:
Data = Model.where("date(now()) between from_date and to_date")
data = ModelName.find(:all, :conditions => "today >= from_date and today <= to_date")
Это должно сделать трюк.
today = Date.today
data = ModelName.where("from_date <= ? AND to_date >= ?", today, today)
Безопасный и простой способ сделать это:
Model.where(':date BETWEEN from_date AND to_date', date: Date.current)
Вы можете использовать нижний камень для поиска записей между датами,
Этот драгоценный камень довольно прост в использовании и более ясен По звездам я использую этот драгоценный камень, а 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)
Пожалуйста, просмотрите документацию и попробуйте.
Хорошо, после долгого поиска в 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", чтобы сделать ваш запрос как можно более конкретным.