2014-11-05 6 views
0

У меня есть запрос, как это:Строка Дата преобразования внутри Rails Где Раздел

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, чтобы включить в себя предложение where? Есть ли метод в Rails, чтобы я мог сделать эту работу?

+3

Можете ли вы определенно не исправить схему базы данных? Сохранение значений даты/времени в виде строк ужасно. Если это совершенно невозможно, какой формат вы используете? –

+0

Преобразовать 'medical_card_expiry_date' в тип даты – RSB

+0

Я знаю, что это ужасно, чтобы сохранить значения даты/времени как string.It, как схема db, теперь немного сложна, и многие другие методы используют это значение, и, следовательно, если я изменю схему db, это не представляется возможным в текущем объеме. –

ответ

2

В вашем запросе ничего не может сделать 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) 

На основе замечаний, вот 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 (символ меняется, неизвестно) не существует –

+1

@SoorajChandu, Мэтт прямо сказал, что это для MySQL. – blelump

+0

@SoorajChandu Обновлено с версией Postgres. – Matt

Смежные вопросы