繁体   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