我有一个页面,用户可以在其中插入邮政编码,并会在代码附近返回所有邮政编码。
现在我有这张桌子
CREATE TABLE [dbo].[zip](
[zipcode] [varchar](5) NOT NULL,
[state] [varchar](2) NULL,
[city] [varchar](50) NULL,
[longitude] [float] NULL,
[latitude] [float] NULL,
[CreateStamp] [smalldatetime] NULL,
[state_name] [varchar](50) NULL,
)
如果你能给我一个完整的指示,我不知道如何做到这一点
结果将是用户插入他们的邮政编码,然后查询将返回他们自己的邮政编码50英里内的所有邮政编码。
答案 0 :(得分:0)
如果您正在使用SQL Server 2008
及更高版本,则可以使用GEOGRAPHY
数据类型。
首先,您需要根据其邮政编码获取中心的Geography
位置,然后选择指定距离内的所有记录。要计算距离,请使用STDistance
方法。
这是一个例子:
DECLARE @cZip VARCHAR(5)
SET @cZip = '<center zip code>'
DECLARE @dMin DECIMAL = 50 * 1609.344 -- metres
DECLARE @c GEOGRAPHY
SELECT @c = GEOGRAPHY::Parse('Point(' + CAST(longitude AS VARCHAR) + ' ' + CAST(latitude AS VARCHAR) + ')')
FROM zip
WHERE zipcode = @cZip
SELECT *
FROM zip
WHERE @c.STDistance(GEOGRAPHY::Parse('Point(' + CAST(longitude AS VARCHAR) + ' ' + CAST(latitude AS VARCHAR) + ')')) <= @dMin