我目前不必經過我的查詢,並在轉讓他們使用的是Oracle,而不是SQLSERVER和我有點堅持這一查詢我是來自here半正矢查詢到Oracle
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
我完全失去了,以什麼在這裏做。
任何想法,我可以做些什麼來使它工作?
在此先感謝
從'horrible'到'decent'移調。使用空格。分解成部分(也許是函數)。分別嘗試每個功能 - 並找到與Oracle相同的功能。分別嘗試每個子句(如'Top') - 並找到與Oracle相同的東西。 –
我似乎無法找到'radians'的替代方法或找出爲什麼'E'問題正在發生?網上似乎沒有太多關於hadrsine和oracle的信息 –
我認爲如果你想「正確地」這樣做,你最好用Oracle的[Spatial](http:// download)存儲你的位置.oracle.com/docs/html/A88805_01/sdo_intr.htm)擴展名和使用它的一個距離函數,我認爲它包括Haversine。但我恐怕不是Oracle專家。否則,放棄這些「E」;他們是不需要的,並開始告訴我們你得到的每個問題的確切錯誤信息。 –