first check if the zipcode_to_look_for exists. If not, try this:
SELECT max(zip_code)
FROM zip_code_table
WHERE zip_code < zip_code_to_look_for;
This selects the maximum value of zip_code from all zipcodes that are lower than zip_code_to_look_for
You could also combine the two statements, and go for something like
SELECT max(zip_code)
FROM zip_code_table
WHERE zip_code <= zip_code_to_look_for;
This will give either the perfect match, or the next best thing.
But you will have to find a way of telling if the result is the perfect match or the next-best-thing.