我目前必须检查我的查询并将它们转移到使用 Oracle 而不是 SQLSERVER,并且我对我使用的 here 中的这个查询有点卡住了。
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
现在我知道这是一个可怕的查询,但 Oracle 似乎遇到了很多问题。
首先,它不喜欢 6371E
中的 E
以及所有后续的 E
其次,它不喜欢 square
函数,因此我决定使用 power
函数,但这仍然给了我错误。
第三,它不喜欢 radians
函数
第四,它不喜欢 TOP 1
部分,因此我将其更改为在 WHERE
子句中使用 ROWNUM
我完全不知道在这里做什么。
关于我能做些什么来让它发挥作用,有什么想法吗?
提前致谢
最佳答案
关于sql - Oracle 半正矢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7418979/