2014-11-05 43 views
0

我有這樣的查詢:字符串到日期轉換中的Rails Where子句

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

這個查詢會工作得很好,如果medical_card_expiry_dateDate格式,但不幸的是它的一個String,因此不會產生預期結果。

我可以將medical_card_expiry_date轉換爲Date insdide where子句本身嗎?Rails中是否有方法以便我可以做到這一點?

+3

你絕對不能修復數據庫模式嗎?將日期/時間值存儲爲字符串非常可怕。如果這完全不可修復,那麼您使用的是什麼格式? – 2014-11-05 09:30:03

+0

將'medical_card_expiry_date'轉換爲日期類型 – RSB 2014-11-05 09:31:16

+0

我知道將日期/時間值保存爲字符串是非常可怕的。它現在像db模式有點複雜,很多其他方法使用此值,因此如果我更改db模式,它是在當前範圍內不可行。 – 2014-11-05 09:33:43

回答

2

在您的查詢中沒有任何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

+0

這不工作,給出了一個錯誤 ActiveRecord :: StatementInvalid:PG :: UndefinedFunction:錯誤:函數str_to_date(字符變化,未知)不存在 – 2014-11-05 09:49:47

+1

@SoorajChandu,馬特明確表示,它是MySQL的。 – blelump 2014-11-05 10:02:21

+0

@SoorajChandu用Postgres版本更新。 – Matt 2014-11-05 11:59:53