Very simple
You just need the latitude and longitude of the zipcodes against which zipcode you want to get the zipcodes. If you not have longitude and latotude get it from google it is free. you can easily get latitude and longitude by zipcode.
For example you want to get the zipcodes round 100 mile of 'H8t'
i have a table of zipcodes having latitude and longitude info.
First i write a query to my table to get latitude and longitude
SELECT * FROM Tbl_Master_ZIPCodes WHERE ZIPcode ='H8T'
after getting latitude and longitude i write a query below to get all zipcodes in the range of 100 miles of 'H8T'
SELECT distinct zipcode,
3963 * (ACOS((SIN(45.456700/57.2958) * SIN(latitude/57.2958)) + (COS(45.456700/57.2958) * COS(latitude/57.2958) * COS(longitude/57.2958 - -73.712000/57.2958)))) AS distance
FROM Tbl_Master_ZIPCodes
WHERE 3963 * (ACOS((SIN(45.456700/57.2958) * SIN(latitude/57.2958)) + (COS(45.456700/57.2958) * COS(latitude/57.2958) * COS(longitude/57.2958 - -73.712000/57.2958)))) <= 100 Order by Distance