[英]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中, 日期是保留字; 用作列名的保留字必須用雙引號引起來。 請注意,數字在單引號內,並且關鍵字interval和hour沒有被引號。 對標准SQL的支持千差萬別,尤其是在您所在的社區。 (引用保留字和日期算術。)
這樣。 。 。 檢查您目標平台的文檔,以確保正確引用(或不引用)這兩件事。
不過,我很難說服自己這可能是造成您問題的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.