Ruby on Rails - 使用Time解析查询

时间:2017-01-10 15:25:10

标签: sql ruby-on-rails ruby activerecord rails-activerecord

如何选择日期过去的所有记录?

我有“日期”栏,格式为:'%m /%d /%Y',例如“01/10/2017”。 列类型是字符串,我无法更改类型。

我该如何撰写查询。

类似于:Article.where(Time.parse(:date).past?)

我需要纯粹的RoR解决方案,没有任何宝石。

3 个答案:

答案 0 :(得分:1)

如果底层数据库可以使用MySQL STR_TO_DATE函数,那么这可能有效:

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

答案 1 :(得分:0)

除非您可以使用本机SQL函数,否则您在解析字符串列时会遇到问题。

您可能需要考虑将日期列重新格式化为更传统的日期时间格式,但您也可以使用chronic

在迁移中:

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

简而言之,chronic可以轻松处理非常规日期格式,您可以在此处进行此类处理。如果运行上述迁移,则可以运行以下查询,该查询更清晰:

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

答案 2 :(得分:0)

我相信这对你有用:

select c.id, c.name, co.promoter_list from competition c left join ( select competitionid, group_concat(organisationid separator ', ') as promoter_list from competition_organisation group by competitionid ) co on co.competitionid = c.id;

这将拉出今天之前的所有记录。

编辑: 该死的,我正在写这个答案,而另外三个人正在写同样的事情。遗憾