Ruby on rails Rails Where子句中的字符串到日期转换

Ruby on rails Rails Where子句中的字符串到日期转换,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有这样一个问题: User.where("medical_card_expiry_date BETWEEN ? AND ?",Time.now.to_date,(Time.now+10.years).to_date) 如果medical\u card\u expiration\u date的格式为date格式,则此查询可以正常工作,但不幸的是,它是字符串,因此不会产生预期结果 我可以在where子句本身中将medical\u card\u Expiration\u date转换为date吗?

我有这样一个问题:

User.where("medical_card_expiry_date BETWEEN ? AND ?",Time.now.to_date,(Time.now+10.years).to_date)
如果
medical\u card\u expiration\u date
的格式为
date
格式,则此查询可以正常工作,但不幸的是,它是
字符串
,因此不会产生预期结果


我可以在where子句本身中将
medical\u card\u Expiration\u date
转换为
date
吗?Rails中是否有一种方法可以使这项工作正常进行?

Rails在您的查询中无法为您提供任何帮助,您需要在使用该字段时要求数据库进行转换。 您可以在MySQL中使用
STR\u TO\u 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)

您需要根据数据库中实际存储的内容更改format元素(
DD-MM-YY
)。可以在此处找到指导原则

您肯定不能修复数据库模式吗?将日期/时间值存储为字符串非常糟糕。如果这是完全不可压缩的,您使用的是什么格式?将
医疗卡\u到期日期
转换为日期类型我知道将日期/时间值保存为字符串是很可怕的。这就像db模式现在有点复杂,许多其他方法都使用此值,因此如果我更改db模式,它在当前范围内是不可行的。这不起作用,给出了一个错误ActiveRecord::StatementInvalid:PG::UndefinedFunction:error:函数str_to_date(字符变化,未知)不存在exist@SoorajChandu,马特明确表示是MySQL的。@SoorajChandu更新了Postgres版本。
User.where("to_date(medical_card_expiry_date, 'DD MM YY') BETWEEN ? AND ?",Time.now.to_date,(Time.now+10.years).to_date)