Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Permintaan SQL yang mendapatkan semua kode pos (alamat) dalam radius 20 mil dari kode pos yang diberikan

Saya menggunakan UDF karena kerumitan perhitungannya.

Di sini Anda melewati basis Lat/Lng bersama dengan Lat/Lng yang akan diuji

Agar Jelas: Jaraknya adalah "saat burung gagak terbang" dan BUKAN jarak mengemudi.

Misalnya:

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 

Pengembalian

UDF jika tertarik

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

Anda mungkin melihat beberapa mil berulang/identik. Seperti yang Anda ketahui, Kota mungkin memiliki nama alternatif, misalnya Brown University dan Brown Station berada di Providence, RI tetapi organisasi mungkin juga memiliki kode posnya sendiri.




  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 2008 Buka Master Key error saat server fisik diganti

  2. T-SQL untuk menemukan Indeks yang Berlebihan

  3. Kueri rekursif SQL yang mendapatkan semua leluhur suatu item

  4. Rekayasa Terbalik untuk Pembuatan Diagram Basis Data di Visio dengan SQL Server 2008

  5. Berbicara Tentang Kemacetan Kinerja SQL Server