簡體   English   中英

與純SQL查詢相比,Rails控制台查詢返回的結果不同

[英]Rails console query returns different results compared to pure sql query

因此,在我的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')
. . . .where("date > current_timestamp - interval '5 hours'")

此WHERE子句的標准SQL語法應為

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

在標准SQL中, 日期是保留字; 用作列名的保留字必須用雙引號引起來。 請注意,數字在單引號內,並且關鍵字intervalhour沒有被引號。 對標准SQL的支持千差萬別,尤其是在您所在的社區。 (引用保留字和日期算術。)

這樣。 檢查您目標平台的文檔,以確保正確引用(或不引用)這兩件事。

不過,我很難說服自己這可能是造成您問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM