<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ed &#34;Over&#34; Ip &#187; SQL</title>
	<atom:link href="http://www.edoverip.com/edoverip/index.php/tag/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.edoverip.com/edoverip</link>
	<description>Frequently geeky, mostly dorky...</description>
	<lastBuildDate>Fri, 26 Mar 2010 15:38:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>ZipCode Radius</title>
		<link>http://www.edoverip.com/edoverip/index.php/2009/01/08/zipcode-radius/</link>
		<comments>http://www.edoverip.com/edoverip/index.php/2009/01/08/zipcode-radius/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 15:41:34 +0000</pubDate>
		<dc:creator>eip</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.edoverip.com/edoverip/?p=246</guid>
		<description><![CDATA[I am working on a personal project that needed a list of US City, State and Zip and the ability to get a list of nearby Zips by radius. For awhile there, I thought I was going to have to pay for a list of ZipCodes but thank goodness I found Gabe Summer&#8217;s blog.  To [...]]]></description>
			<content:encoded><![CDATA[<p>I am working on a personal project that needed a list of US City, State and Zip and the ability to get a list of nearby Zips by radius. For awhile there, I thought I was going to have to pay for a list of ZipCodes but thank goodness I found <a href="http://www.goondocks.com/blog/08-01-22/zip_code_radius_search_using_mysql.aspx" target="_blank">Gabe Summer&#8217;s</a> blog.  To pay it forward, so to speak, I have adapted Gabe&#8217;s code to SQL Server.  </p>
<p>CityStateZip Table</p>
<p><code> </code></p>
<p style="padding-left: 30px;"><code>CREATE TABLE [dbo].[CityStateZip](<br />
[ZipCode] [char](5) NOT NULL,<br />
[Latitude] [numeric](18, 6) NULL,<br />
[Longitude] [numeric](18, 6) NULL,<br />
[City] [varchar](50) NOT NULL,<br />
[State] [char](2) NOT NULL,<br />
[County] [varchar](50) NOT NULL,<br />
[Zip_Class] [varchar](50) NOT NULL,<br />
CONSTRAINT [PK_CityStateZip] PRIMARY KEY CLUSTERED<br />
(<br />
[ZipCode] ASC<br />
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]<br />
) ON [PRIMARY]</code></p>
<p>GetDistance Function</p>
<p style="padding-left: 30px;"><code>CREATE  FUNCTION GetDistance(<br />
     @lat1  numeric (9,6),<br />
     @lon1  numeric (9,6),<br />
     @lat2  numeric (9,6),<br />
     @lon2  numeric (9,6)<br />
     )  RETURNS decimal (10,5)<br />
BEGIN </code></p>
<p style="padding-left: 60px;"><code>DECLARE  @x  decimal (20,10);</code></p>
<p><code> </code></p>
<p style="padding-left: 60px;"><span style="font-family: -webkit-monospace;">SET  @x = sin( @lat1 * pi()/180 ) * sin( @lat2 * pi()/180  ) + cos(@lat1 * pi()/180 ) * cos( @lat2 * pi()/180 ) * cos(  abs ( (@lon2 * pi()/180) &#8211;  (@lon1 * pi()/180) ) );</span></p>
<p style="padding-left: 60px;"><code> SET  @x = atan( ( sqrt( 1- power( @x, 2 ) ) ) / @x );</code></p>
<p style="padding-left: 60px;"><code> RETURN  ( 1.852 * 60.0 * ((@x/pi())*180) ) / 1.609344;</code></p>
<p style="padding-left: 30px;"><code>END</code></p>
<p>GetNearbyZipCodes Stored Procedure</p>
<p style="padding-left: 30px; "><code>CREATE  PROCEDURE usp_GetNearbyZipCodes<br />
     @zipbase  varchar (6),<br />
     @range  numeric (15)<br />
AS<br />
BEGIN</code></p>
<p style="padding-left: 30px; "><code>     SET NOCOUNT ON</code></p>
<p><code> </code></p>
<p> </p>
<p><code></p>
<p style="padding-left: 60px; ">DECLARE  @lat1  decimal (5,2);<br />
DECLARE  @long1  decimal (5,2);<br />
DECLARE  @rangeFactor  decimal (7,6);</p>
<p style="padding-left: 60px; ">SET  @rangeFactor = 0.014457;</p>
<p style="padding-left: 60px; ">SELECT  @lat1=latitude, @long1=longitude<br />
  FROM  CityStateZip<br />
 WHERE  zipcode = @zipbase;</p>
<p style="padding-left: 60px; ">SELECT  B.zipcode, dbo.GetDistance(@lat1,@long1,B.latitude,B.longitude) Distance<br />
  FROM  CityStateZip AS  B<br />
 WHERE  B.latitude  BETWEEN  @lat1-(@range*@rangeFactor) AND  @lat1+(@range*@rangeFactor)<br />
   AND  B.longitude  BETWEEN  @long1-(@range*@rangeFactor) AND @long1+(@range*@rangeFactor)<br />
   AND  dbo.GetDistance(@lat1,@long1,B.latitude,B.longitude) &lt;= @range;</p>
<p></code></p>
<p> </p>
<p> </p>
<p style="padding-left: 30px; "><code>END</code></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edoverip.com/edoverip/index.php/2009/01/08/zipcode-radius/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

