我有这样的查询:
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中是否有方法可以使这项工作成功?
答案 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