我在查找其開始和結束日期範圍超過特定日期的記錄。日期是隨機的,並且:start_date和end_date是價格實體的屬性。在日期範圍內查找記錄
date = Time.now
record_i_want = Price.where(date => :start_date .. :end_date)
謝謝。
我在查找其開始和結束日期範圍超過特定日期的記錄。日期是隨機的,並且:start_date和end_date是價格實體的屬性。在日期範圍內查找記錄
date = Time.now
record_i_want = Price.where(date => :start_date .. :end_date)
謝謝。
你可以簡單地做
Price.where(:date => start_date..end_date)
這將導致以下SQL
(開始和結束日期 - '2014年3月27日', '2014年3月28日')
SELECT `prices`.* FROM `prices` WHERE (`prices`.`date` BETWEEN '2014-03-27' AND '2014-03-28')
編輯: 認識到這是您正在查找的查詢。謝謝你,Coenwulf指出它
Price.where(['start_date < ? AND end_date > ?', date, date])
這應該工作:
def get_record_by_date(date)
Price.where([start_date.to_i < date.to_i] && [end_date.to_i > date.to_i])
end
你要選擇行您的日期比END_DATE大於起始日期少。你可以在你的調用中指定適當的SQL where子句,如下所示:
Price.where([":date >= start_date AND :date <= end_date", {date: Date.today})
這會給你所有匹配的價格。如果你知道你會得到一個,你可以通過先打電話來得到它。
Price.where([":date >= start_date AND :date <= end_date", {date: Date.today}).first
進行任何適當調整> =和< =如果你要排除的起始日期和/或從結果END_DATE。舉例來說,如果價格有效啓動的起始日期,但不通過END_DATE有效,你可以改變子句:
":date >= start_date AND :date < end_date"
+1以適當的紅寶石方式使用日期範圍。 –
這是一個很棒的提示。不知道。真棒。 – eduardosasso
這看起來與OP請求的內容相反。如果日期是表格中的字段,那將是完美的,但它會根據帖子中的文字顯示錶格中有start_date和end_date字段。所以這段代碼並沒有解決發佈的問題。 – Coenwulf