如何选择日期过去的所有记录?
我有“日期”栏,格式为:'%m /%d /%Y',例如“01/10/2017”。 列类型是字符串,我无法更改类型。
我该如何撰写查询。
类似于:Article.where(Time.parse(:date).past?)
?
我需要纯粹的RoR解决方案,没有任何宝石。
答案 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;
这将拉出今天之前的所有记录。
编辑: 该死的,我正在写这个答案,而另外三个人正在写同样的事情。遗憾