Rails中的字符串到日期转换条款

时间:2014-11-05 09:27:01

标签: ruby-on-rails activerecord

我有这样的查询:

User.where("medical_card_expiry_date BETWEEN ? AND ?",Time.now.to_date,(Time.now+10.years).to_date)

如果medical_card_expiry_date采用Date格式,则此查询可以正常运行,但不幸的是它是String,因此不会产生预期结果。

我可以将medical_card_expiry_date转换为Date insdide where子句本身吗?Rails中是否有方法可以使这项工作成功?

1 个答案:

答案 0 :(得分:4)

Rails在您的查询中无法为您做任何事情,您需要让数据库在使用该字段时进行转换。 你可以在MySQL中使用STR_TO_DATE(如果这是你正在使用的,否则找到相关的替代方法),如下所示:

User.where("STR_TO_DATE(medical_card_expiry_date, '%m/%d/%Y') BETWEEN ? AND ?",Time.now.to_date,(Time.now+10.years).to_date)

根据评论,这是一个Postgres版本

User.where("to_date(medical_card_expiry_date, 'DD MM YY') BETWEEN ? AND ?",Time.now.to_date,(Time.now+10.years).to_date)

您需要根据数据库中实际存储的内容更改格式元素(DD MM YY)。可以在http://www.postgresql.org/docs/8.1/static/functions-formatting.html

找到指南