1
我有一个表有一栏邮编参数化的SQL查询邮政编码和半径不工作
即与具有邮政编码的ID和纬度列和拉链码表
人经度。
我发现了一系列使用纬度和经度计算球体距离(基本上用于邮编)的函数。我对SQL很陌生,想知道如何在存储过程中使用这些函数。
纬度功能:
ALTER Function [dbo].[LatitudePlusDistance](@StartLatitude Float, @Distance Float) Returns Float
As
Begin
Return (Select @StartLatitude + Sqrt(@Distance * @Distance/4766.8999155991))
End
经度功能:
ALTER FUNCTION [dbo].[LongitudePlusDistance]
(
@StartLongitude float,
@StartLatitude float,
@Distance float
)
RETURNS Float
AS
begin
RETURN (select @startLongitude + sqrt(@Distance * @Distance/(4784.39411916406*Cos(2*@StartLatitude/114.591559026165)*Cos(2*@StartLatitude/114.591559026165))))
END
begin
RETURN (select @startLongitude + sqrt(@Distance * @Distance/(4784.39411916406*Cos(2*@StartLatitude/114.591559026165)*Cos(2*@StartLatitude/114.591559026165))))
END`
计算距离函数
`ALTER Function [dbo].[CalculateDistance]
(@Longitude1 Decimal(8,5),
@Latitude1 Decimal(8,5),
@Longitude2 Decimal(8,5),
@Latitude2 Decimal(8,5))
Returns Float
As
Begin
Declare @Temp Float
Set @Temp = sin(@Latitude1/57.2957795130823) * sin(@Latitude2/57.2957795130823) + cos(@Latitude1/57.2957795130823) * cos(@Latitude2/57.2957795130823) * cos(@Longitude2/57.2957795130823 - @Longitude1/57.2957795130823)
if @Temp > 1
Set @Temp = 1
Else If @Temp < -1
Set @Temp = -1
Return (3958.75586574 * acos(@Temp))
End`
我想这样的事情...
Declare @Longitude Decimal(8,5)
Declare @Latitude Decimal(8,5)
Select @Longitude = Longitude,
@Latitude = Latitude
From ZipCodes
Where ZipCode = '20013'
Declare @Distance int
Select persons.personName, ZipCodes.City, dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude) As Distance
From persons
Inner Join ZipCodes
On persons.zipcode = ZipCodes.ZipCode
Order By dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude)
WHERE dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude) As Distance <= @Distance
我试过这个只是为了过滤参数化搜索半径之外的人,它不起作用。说有一个“关键字附近的语法不正确‘其中’
这还不包括我的愿望在为邮编参数扔所以不是:
其中邮政编码=‘20013’
我想是这样的:
其中邮政编码= @zipcode
,但它说我需要声明zscalar变量@zipcode不管在哪里我试图做到这一点...我不断收到同样的错误
感谢您的帮助
试过了。我全部拿出了这个命令的子句。似乎没有工作。也没有要求我输入@distance输入。 – user2369145
刚刚编辑了查询。新增set @Distance = 5。从那里你可以设置你的距离。 –
仍然不起作用:(我应该说(希望这将有助于诊断问题)我正在使用vb web开发人员,我只是在“新查询”向导中尝试这一切。是否有所作为? – user2369145