Haversine查询到Oracle

Jam*_*lor 2 sql sql-server oracle haversine

我目前不得不通过我的查询并将它们转移到使用Oracle而不是SQLSERVER,我有点卡住这个我在这里使用的查询

SELECT TOP 1 * FROM ( SELECT o.outcode AS lead_postcode, v.location, 
v.location_name, v.outcode AS venue_postcode, 6371.0E * 
( 2.0E *asin(case when 1.0E < (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-
(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) 
* cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-
(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) then 1.0E else 
(sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))
/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT)))
* square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))
/2.0E))))) end )) AS distance FROM venue_postcodes v, uk_postcodes o 
WHERE o.outcode = @nrpostcode ) i WHERE distance<100 ORDER BY distance
Run Code Online (Sandbox Code Playgroud)

现在我知道这是一个可怕的查询,但Oracle似乎遇到了很多问题.

首先,它不喜欢Ein 6371E和所有后续E

其次它不喜欢这个square功能所以我决定使用这个power功能,但这仍然给了我错误.

第三,它不喜欢这个radians功能

第四,它不喜欢这个TOP 1部分,所以我把它改成ROWNUM了在WHERE子句中使用

我完全迷失在这里做什么.

关于我能做些什么才能让它发挥作用的任何想法?

提前致谢

Tom*_*Tom 5

我建议你采取略有不同的方法.

看看这个网站:http://psoug.org/reference/functions.html

寻找关于"计算距离"的部分