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子句中使用
我完全迷失在这里做什么.
关于我能做些什么才能让它发挥作用的任何想法?
提前致谢
| 归档时间: |
|
| 查看次数: |
3777 次 |
| 最近记录: |