I’m currently having to go through my queries and transfer them over to using Oracle rather than SQLSERVER and i’m a bit stuck with this query which i’m using from 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
Now I know this is a horrible query to look at but Oracle seems to be having a lot of problems with it.
Firstly it doesn’t like the E in 6371E and all the subsequent E‘s
Secondly it doesn’t like the square function so I decided to use the power function but this still gave me errors.
Thirdly it doesn’t like the radians function
Fourthly it doesn’t like the TOP 1 part so I had changed this to use ROWNUM in the WHERE clause
I’m completely lost as to what to do here.
Any ideas as to what I can do to make it work?
Thanks in advance
I’d recommend you take a slightly different approach.
Check out this site: http://psoug.org/reference/functions.html
Look for the part referring to “calc distance”