Extracting Zip Codes from Data in SQL

When dealing with large datasets, particularly those related to addresses or geographical locations, there’s a good chance you’ll need to extract or work with zip codes. SQL, as a powerful language for managing and querying databases, offers a range of tools and techniques to help you handle zip codes efficiently.

1. Basics of Zip Codes in Databases

Zip codes can appear in various formats depending on the country and the specific dataset. In the United States, for instance, zip codes can be 5 digits (e.g., “90210”) or 9 digits in a ‘ZIP+4’ format (e.g., “90210-1234”).

When stored in a database, zip codes can be found in:

  • Dedicated columns, specifically for zip/postal codes.
  • Part of an address column, combined with other information.

2. Extracting Zip Codes from Dedicated Columns

If you’re lucky, your database will have a dedicated column for zip codes. In such cases, extracting zip codes is straightforward.

SELECT zip_code FROM addresses;

Here, addresses is the table name and zip_code is the column containing the zip codes.

3. Extracting Zip Codes from Combined Address Columns

Things get trickier when zip codes are part of a larger address string. For example, consider a table addresses with a column full_address:

123 Main St, Springfield, IL 62701
456 Elm St, Anytown, CA 90210-1234

To extract zip codes, you can use SQL string functions:

a) Using the RIGHT() and CHARINDEX() functions (for MS SQL Server):

If zip codes are consistently at the end of the address:

SELECT RIGHT(full_address, CHARINDEX(' ', REVERSE(full_address)) - 1) AS zip_code
FROM addresses;

b) Using the SUBSTRING() and INSTR() functions (for MySQL):

SELECT SUBSTRING(full_address, INSTR(full_address, 'CA ') + 3) AS zip_code
FROM addresses;

This assumes “CA” as the state abbreviation. Adjust accordingly for other states.

4. Handling Multiple Formats

To cater to both 5-digit and 9-digit zip codes, you can incorporate conditional logic:

    WHEN full_address LIKE '%_____-____' THEN RIGHT(full_address, 10)
    ELSE RIGHT(full_address, 5)
END AS zip_code
FROM addresses;

This example checks for the presence of a dash followed by four numbers to determine the format.

5. Filtering by Zip Codes

Once you’ve extracted zip codes, you can also filter data based on them:

SELECT * FROM addresses
WHERE zip_code BETWEEN '90210' AND '90220';

This returns all addresses with zip codes in the range from 90210 to 90220.

6. Best Practices

  1. Consistent Formatting: If you’re designing a database, consider using a dedicated column for zip codes to simplify extraction and reduce potential errors.
  2. Regular Expressions: Some SQL databases support regular expressions, which can be a powerful tool for extracting patterns like zip codes.
  3. Validation: Always validate the extracted zip codes, especially if they’re being used for important business decisions.

Gaelim Holland

Notify of

Inline Feedbacks
View all comments