簡體   English   中英

Ruby on Rails - 使用時間解析查詢的位置

[英]Ruby on Rails - where query with Time parse

如何選擇日期已過的所有記錄?

我有格式為“日期”的列:“%m/%d/%Y”,例如“01/10/2017”。 列類型是字符串,我無法更改類型。

我應該如何編寫查詢。

類似於: Article.where(Time.parse(:date).past?)

我需要純 RoR 的解決方案,沒有任何 gem。

如果您的底層數據庫可以使用 MySQL STR_TO_DATE函數,這可能會起作用:

Article.where("STR_TO_DATE(date, '%m/%d/%Y') < ?)", Time.now)

除非您可以使用本機 SQL 函數,否則您將無法解析迄今為止的字符串列。

您可能需要考慮將日期列重新格式化為更傳統的日期時間格式,但您也可以為此使用chronic

在遷移中:

Article.find_each do |article|
  stamp = Chronic.parse(article.date)
  article.update_attributes(date: stamp)
end

簡而言之, chronic可以輕松處理非常規的日期格式,您在這里遇到了這種情況。 如果您運行上述遷移,您可以運行以下查詢,它更清晰:

Article.where("date <= ?", Time.now)

我相信這應該適合你:

Article.where('date < ?', Time.now)

這將拉出日期在今天之前的所有記錄。

編輯:該死,我正在寫這個答案,而其他三個人也在寫同樣的東西。 對不起

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM