Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL क्वेरी जो किसी दिए गए ज़िप कोड के 20-मील के दायरे में सभी ज़िप कोड (पता) प्राप्त करती है

गणना की जटिलता के कारण मैं यूडीएफ का उपयोग करता हूं।

यहां आप परीक्षण के लिए लेट/लैंग के साथ आधार लेट/लैंग पास करते हैं

स्पष्ट होना: दूरी "जैसे कौवा उड़ता है" और ड्राइविंग दूरी नहीं है।

उदाहरण के लिए:

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 

रिटर्न

यूडीएफ अगर दिलचस्पी है

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

आप कुछ दोहराव/समान मील देख सकते हैं। जैसा कि आप जानते हैं, शहरों के वैकल्पिक नाम हो सकते हैं, उदाहरण के लिए ब्राउन यूनिवर्सिटी और ब्राउन स्टेशन प्रोविडेंस, आरआई में है लेकिन संगठन का अपना ज़िप कोड भी हो सकता है।




  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 संग्रहीत कार्यविधि निष्पादित करें और परिणामों को संसाधित करें

  2. स्वचालित डेटा संग्रह:MS SQL सर्वर में डेटाबेस फ़ाइलें और लॉजिकल ड्राइव

  3. एक चर को एक ट्रिगर में पास करें

  4. 1899-12-30 12/31 के बजाय एक्सेस/एसक्यूएल सर्वर में शून्य तिथि क्यों है?

  5. सी # पैरामीटर के रूप में सूची के साथ SQL तालिका में डालें