Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn SQL lấy tất cả các mã zip (địa chỉ) trong bán kính 20 dặm của một mã zip nhất định

Tôi sử dụng UDF do tính phức tạp của phép tính.

Tại đây bạn vượt qua Lat / Lng cơ sở cùng với Lat / Lng để được kiểm tra

Để rõ ràng: Khoảng cách là "như con quạ bay" chứ KHÔNG phải khoảng cách lái xe.

Ví dụ:

Declare @BaseZip  varchar(10) = '02806'
Declare @Within   int         = 20

Select Distinct
       BaseZip = A.ZipCode
      ,B.ZipCode
      ,B.CityName
      ,B.StateCode
      ,Miles = [dbo].[udf-Geo-Calc-Miles] (A.Lat,A.Lng,B.Lat,B.Lng)
 From (Select Distinct ZipCode,Lat,Lng From [dbo].[ZipCodes] where [email protected]) A
 Join [dbo].[ZipCodes] B
   on [dbo].[udf-Geo-Calc-Miles] (A.Lat,A.Lng,B.Lat,B.Lng) <= @Within
 Order By 5 

Trả lại

UDF nếu quan tâm

CREATE Function [dbo].[udf-geo-Calc-Miles] (@Lat1 float,@Lng1 float,@Lat2 Float,@Lng2 float)  
Returns Float as  
Begin 
   Declare @Miles Float = (Sin(Radians(@Lat1)) * Sin(Radians(@Lat2))) + (Cos(Radians(@Lat1)) * Cos(Radians(@Lat2)) * Cos(Radians(@Lng2) - Radians(@Lng1)))
   Return Case When @Miles is null then 0 else abs((3958.75 * Atan(Sqrt(1 - power(@Miles, 2)) / @Miles))) end
End

Bạn có thể nhận thấy một số dặm lặp lại / giống hệt nhau. Như bạn có thể biết, các Thành phố có thể có tên thay thế, ví dụ như Đại học Brown và Nhà ga Brown ở Providence, RI nhưng tổ chức cũng có thể có mã zip của riêng họ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2012 FTS có hỗ trợ gốc cho việc đánh dấu lần truy cập không?

  2. Cách tắt tính năng thu thập dữ liệu thay đổi (CDC) trên cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng SQL Server

  3. Sai mili giây khi chuyển đổi từ XML sang SQL Server datetime

  4. Làm thế nào để sử dụng lại một cách chính xác và hiệu quả một câu lệnh đã chuẩn bị trong C # .NET (SQL Server)?

  5. Làm cách nào để chọn 5 PERCENT HÀNG ĐẦU từ mỗi nhóm?