2012-07-04 3 views
0

Я хотел бы сравнить дату, введенную в поле поиска (например, 04.07.2012), с датой из моей таблицы (столбец datetime под названием date). Тем не менее, я не могу получить прямой запрос SQL.Как найти даты в PostgreSQL?

Что я пробовал:

find(:all, :conditions => ['\'to_timestamp(date, \'DD Mon YYYY\')\' LIKE \'to_timestamp(?, \'DD Mon YYYY\')\'', '#{query}']) 

но он не:

PG::Error: ERROR: syntax error at or near "DD" 
LINE 1: ...s".* FROM "projects" WHERE ('to_timestamp(date, 'DD Mon YYY... 
                  ^
: SELECT "pacients".* FROM "projects" WHERE ('to_timestamp(date, 'DD Mon YYYY')' LIKE 'to_timestamp('#{query}', 'DD Mon YYYY')') 

Я настоящий новичок, насколько (Postgre) SQL обеспокоен, и я был бы очень признателен некоторые намеки в правильное направление написания этого запроса.

Спасибо, миллион!

+0

Обязательно ознакомьтесь с разницей между [типами данных 'timestamp' и' date'] (http://www.postgresql.org/docs/current/interactive/datatype-datetime.html) в PostgreSQL. –

ответ

3

Как скудный отметил есть несколько вопросов здесь:

  • неправильная строка интерполяции
  • делает базу данных делать больше работы, чем это необходимо, и с помощью LIKE когда вы можете сделать дату поиска более непосредственно:

Пусть ActiveRecord форматировать входные данные даты использовать прямые SQL для сравнения дат, что-то вроде:

start_date = Date.civil(2012, 7, 4) 
end_date = Date.civil(2012, 7, 20) 
User.where(["date BETWEEN ? AND ?", start_date, end_date]) 

Преобразование даты источника и дат в базе данных в метку времени, отформатированной как строка, а затем с использованием LIKE очень круто и плохо работает.

+0

Спасибо, это то, что я использовал в конце. В моей project.rb модели: определение функции self.search (запрос) \t начать \t \t если запрос \t \t \t Project.where ([ "? Дату и между ними", Date.parse (запрос), Date.parse (запрос)]) \t \t еще \t \t \t Project.all \t конец \t спасательное ArgumentError \t \t Project.all \t конец' – mo5470

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