所以在我的Rails控制台中,我有一个生成SQL的活动记录查询。我查看了我的logs/development
,我可以看到正在生成的SQL。
出于某种原因,当我运行活动记录查询时,我没有得到预期的结果。我查看了我的日志并将sql复制/粘贴到连接到我的数据库的控制台中,然后突然返回正确的结果。任何想法为什么会这样?我正在使用PostgreSQL。
我正在努力寻找过去5小时内开业的商店。
EDIT减去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')
答案 0 :(得分:0)
. . . .where("date > current_timestamp - interval '5 hours'")
此WHERE子句的标准SQL语法应为
WHERE "date" > current_timestamp - interval '5' hour
在标准SQL中, date 是保留字;用作列名的保留字必须是双引号。请注意,该数字在单引号内,并且未引用关键字 interval 和 hour 。对标准SQL的支持变化很大,尤其是在您的社区。 (引用保留字和日期算术。)
所以。 。 。检查目标平台的文档,确保正确引用(或不引用)这两件事。
我很难说服自己,这可能是你问题的原因。