現在、クエリを実行して、SQLSERVER ではなく 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
これは見るのが恐ろしいクエリであることはわかっていますが、オラクルはこれに多くの問題を抱えているようです。
E
まず、 in6371E
とそれに続くすべての がE
好きではありません
次に、関数が気に入らないsquare
ので、関数を使用することにしましたpower
が、それでもエラーが発生しました。
radians
第三に、機能が気に入らない
第四に、その部分が気に入らないので、これを句でTOP 1
使用するように変更しROWNUM
ましたWHERE
ここで何をすべきか完全に迷っています。
それを機能させるために何ができるかについてのアイデアはありますか?
前もって感謝します