В настоящее время мне нужно пройти через мои запросы и перенести их на использование 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
Теперь я знаю, что это ужасный запрос, но у Oracle, похоже, много проблем с ним.
Во-первых, ему не нравятся E
в 6371E
и все последующие E
.
Во-вторых, ей не нравится функция square
, поэтому я решил использовать функцию power
, но это все равно дало мне ошибки.
В-третьих, ей не нравится функция radians
В-четвертых, ему не нравится часть TOP 1
, поэтому я изменил ее, чтобы использовать ROWNUM
в предложении WHERE
Я совершенно потерян, что делать здесь.
Есть какие-нибудь идеи относительно того, что я могу сделать, чтобы это работало?
Заранее спасибо