SQL使用一个查询计算两个XY坐标之间的XY距离

时间:2016-04-15 11:49:44

标签: sql sql-server tsql

我有一个包含ID及其相关坐标的数据库。 如果我有两个ID,那么返回这两点之间的线性距离的最有效的TSQL查询是什么? 我知道如何使用4个变量和3个select语句来实现它,但有更好的方法吗?

ID  |  X  |  Y
1   |  10 |  15
2   |  12 |  20

鉴于ID 1和2找到它们之间的线性距离。

3 个答案:

答案 0 :(得分:2)

我不确定你的意思是"线性距离",但这是获得曼哈顿距离的一种方法:

select abs(p1.x - p2.x) + (abs(p1.y - p2.y)
from points p1 cross join
     points p2
where p1.id = 1 and p2.id = 2;

欧几里德距离将使用适当的函数。

答案 1 :(得分:0)

以GL的欧几里德距离代码为基础:

DECLARE @points TABLE (ID INT IDENTITY, X DECIMAL(8,4), Y DECIMAL(8,4))

INSERT INTO @points (X,Y) VALUES (10,15),(12,20)
SELECT * FROM @points

SELECT ROUND(SQRT((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)),2)
FROM @points p1 CROSS JOIN
     @points p2
WHERE p1.id = 1 AND p2.id = 2;

显然你有自己的表本身的代码,但这将自己运行,你可以看到它给出5.39的结果,四舍五入,因为我告诉它。

答案 2 :(得分:0)

您可以使用方便的功能

DISTANCE(POINT(p1.x, p1.y), POINT(p2.x, p2.y))