Консольный запрос Rails возвращает разные результаты по сравнению с чистым SQL-запросом - PullRequest
1 голос
/ 10 апреля 2011

Итак, в моей консоли Rails у меня есть запрос активной записи, который генерирует SQL.Я смотрю в logs/development и вижу генерируемый SQL.

По некоторым причинам я не получаю ожидаемых результатов при выполнении запроса активной записи.Я просмотрел свои журналы и скопировал / вставил sql в консоль, которая подключена к моей базе данных, а затем неожиданно возвращает правильные результаты.Есть идеи, почему это происходит?Я использую PostgreSQL.

Я пытаюсь найти магазины, которые были открыты за последние 5 часов.

ПРАВКА, вычитая 10 часов, заставляет этот запрос работать ....

Вызов ActiveRecord (в пределах от geokit gem):

Store.within(10, :origin =>[30.267153000000000, -97.743060799999970]).where("date > current_timestamp - interval '5 hours'")

Сгенерированный SQL:

SELECT "store".*, 
 (ACOS(least(1,COS(0.5282614750548792)*COS(-1.705938231937002)*COS(RADIANS(store.lat))*COS(RADIANS(store.lng))+
 COS(0.5282614750548792)*SIN(-1.705938231937002)*COS(RADIANS(store.lat))*SIN(RADIANS(store.lng))+
 SIN(0.5282614750548792)*SIN(RADIANS(store.lat))))*3963.19)
 AS distance FROM "store" WHERE ((store.lat>30.122583147146404 AND store.lat<30.41172285285359 AND store.lng>-97.91044799232348 AND store.lng<-97.57567360767642)) AND ((
 (ACOS(least(1,COS(0.5282614750548792)*COS(-1.705938231937002)*COS(RADIANS(store.lat))*COS(RADIANS(store.lng))+
 COS(0.5282614750548792)*SIN(-1.705938231937002)*COS(RADIANS(store.lat))*SIN(RADIANS(store.lng))+
 SIN(0.5282614750548792)*SIN(RADIANS(store.lat))))*3963.19)
 <= 10)) AND (date > current_timestamp - interval '5 hours')

1 Ответ

0 голосов
/ 11 апреля 2011
. . . .where("date > current_timestamp - interval '5 hours'")

Стандартный синтаксис SQL для этого предложения WHERE должен быть

WHERE "date" > current_timestamp - interval '5' hour

В стандартном SQL дата является зарезервированным словом; зарезервированные слова, используемые в качестве имен столбцов, должны быть в двойных кавычках. Обратите внимание, что число заключено в одинарные кавычки, а ключевые слова интервал и час не указаны Поддержка стандартного SQL сильно варьируется, особенно в вашем районе. (Цитирование зарезервированных слов и арифметики даты.)

Итак. , , проверьте документы для вашей целевой платформы, чтобы убедиться, что вы цитируете (или не цитируете) эти две вещи правильно.

Мне трудно убедить себя, что это может быть причиной вашей проблемы, однако.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...