[英]Ruby on Rails: Query where date equals another date (ignoring time)
[英]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.