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

Soo*_*ndu 2 activerecord ruby-on-rails

我有一个这样的查询:

User.where("medical_card_expiry_date BETWEEN ? AND ?",Time.now.to_date,(Time.now+10.years).to_date)
Run Code Online (Sandbox Code Playgroud)

如果medical_card_expiry_dateDate格式,则此查询可以正常工作,但不幸的是它是 a String,因此不会产生预期的结果。

我可以将where 子句本身转换medical_card_expiry_dateDateinsdide 吗?Rails 中是否有一种方法可以使这项工作?

Mat*_*att 8

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

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

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

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

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

  • @SoorajChandu,Matt 明确表示它适用于 MySQL。 (2认同)