The Zip Code Stored Procedure/Function

Thanks to Gabe Summer!

GetDistance function

DELIMITER $$

DROP FUNCTION IF EXISTS `GetDistance`$$
CREATE FUNCTION `GetDistance`(
 lat1 numeric(9,6),
 lon1 numeric(9,6),
 lat2 numeric(9,6),
 lon2 numeric(9,6)
) RETURNS decimal(10,5)

BEGIN
 DECLARE x decimal(20,10);
 DECLARE pi decimal(21,20);
 SET pi = 3.14159265358979323846;
 SET x = sin( lat1 * pi/180 ) * sin( lat2 * pi/180  ) + cos(
 lat1 *pi/180 ) * cos( lat2 * pi/180 ) * cos( abs( (lon2 * pi/180) -
 (lon1 *pi/180) ) );
 SET x = atan( ( sqrt( 1- power( x, 2 ) ) ) / x );
 RETURN ( 1.852 * 60.0 * ((x/pi)*180) ) / 1.609344;
END$$

DELIMITER ;

GetNearbyZipCodes procedure

DELIMITER $$

DROP PROCEDURE IF EXISTS `GetNearbyZipCodes`$$
CREATE PROCEDURE `GetNearbyZipCodes`(
    zipbase varchar(6),
    range numeric(15)
)

BEGIN
DECLARE lat1 decimal(5,2);
DECLARE long1 decimal(5,2);
DECLARE rangeFactor decimal(7,6);
SET rangeFactor = 0.014457;
SELECT latitude,longitude into lat1,long1 FROM tbl_zipcodes WHERE zipcode =
zipbase;
SELECT B.zipcode
FROM tbl_zipcodes AS B
WHERE
 B.latitude BETWEEN lat1-(range*rangeFactor) AND lat1+(range*rangeFactor)
 AND B.longitude BETWEEN long1-(range*rangeFactor) AND long1+(range*rangeFactor)
 AND GetDistance(lat1,long1,B.latitude,B.longitude)  <= range;
END$$

DELIMITER ;