SQL中的距离公式

时间:2016-10-15 11:39:43

标签: sql oracle

SQL> SELECT sighting_id, distance 
FROM sightings 
WHERE distance = SQRT(POWER(latitude -(-28),2) + POWER(longitude -(151),2))
GROUP BY sighting_id, distance;

接收错误PLS-306:调用' OGC_DISTANCE'时参数的数量或类型错误。有什么想法吗?

 Name           Null?    Type
 -------------- -------- --------------------------------
 SIGHTING_ID    NOT NULL NUMBER
 SPOTTER_ID              NUMBER
 BIRD_ID                 NUMBER
 LATITUDE                NUMBER
 LONGITUDE               NUMBER
 SIGHTING_DATE           DATE
 DESCRIPTION             VARCHAR2(255)

2 个答案:

答案 0 :(得分:1)

尝试使用其他名称来“距离”#39;列,看起来它是一些内部GEO函数或已在Oracle DB中定义的同义词。还请检查表中的所有纬度和经度值是否为有效数字,而不是空等。

您可能需要为null纬度和经度出现添加一些coalesce()包装,或者添加" AND纬度IS NOT NULL和经度IS NOT NULL"进入WHERE子句。

答案 1 :(得分:0)

问题在于您的表中没有列距离。据我了解你想做的事情:

SELECT sighting_id, SQRT(POWER(latitude -(-28),2) + POWER(longitude -(151),2)) as distance 
FROM sightings 
GROUP BY sighting_id, SQRT(POWER(latitude -(-28),2) + POWER(longitude -(151),2));