原谅我的天真。
我有一个查询,可以让你找到球体上两点之间的距离,在这种情况下,就是邮政编码之间的距离。
SELECT TOP 5 zip, city, state, latitude, longitude,
69.0 * DEGREES(ACOS(COS(RADIANS(latpoint))
* COS(RADIANS(latitude))
* COS(RADIANS(longpoint) - RADIANS(longitude))
+ SIN(RADIANS(latpoint))
* SIN(RADIANS(latitude)))) AS distance_in_miles
FROM us_loc_data
JOIN (
SELECT 39.317974 AS latpoint, -94.57545 AS longpoint
) AS p ON 1=1
ORDER BY distance_in_miles从联接中可以看到,结果集是通过指定一对坐标作为“起始”点来筛选的,然后返回前5位最近位置的列表。(例子如下)

最后,我希望通过指定一个起始邮政编码来过滤结果,而不是指定一对坐标。如何实现一个变量来做到这一点?什么是最佳实践?
发布于 2017-03-21 14:52:25
没有经过测试,但您可以简单地修改您的子查询,以按邮政编码提取Lat/Lng。
Declare @Zip varchar(10) = '02806'
SELECT TOP 5 zip, city, state, latitude, longitude,
69.0 * DEGREES(ACOS(COS(RADIANS(latpoint))
* COS(RADIANS(latitude))
* COS(RADIANS(longpoint) - RADIANS(longitude))
+ SIN(RADIANS(latpoint))
* SIN(RADIANS(latitude)))) AS distance_in_miles
FROM us_loc_data
JOIN (
SELECT latitude AS latpoint
, longitude AS longpoint
From us_loc_data
Where Zip = @Zip
) AS p ON 1=1
ORDER BY distance_in_mileshttps://stackoverflow.com/questions/42929880
复制相似问题