I have a table that has the city, state and zip combined in one field.
Looks like this: Columbus, OH 43217
Combining three separate attributes in a single column is not good relational database design. A principle of the database relational model is that each column position in each row in a table should be
atomic, i.e. it should contain only one legitimate value, of the attribute type represented by the column.
Amending the design is simple provided that the value in each column is consistently formatted and enables it to be parsed by one of the methods suggested by my colleagues. Firstly change the column's name to City, and add two new columns, State and Zip. Then execute an update query which updates the values of the State and Zip columns, using one of the expressions you've been given. Confirm that the two new columns have been updated successfully, and if so execute another update query which updates the City value, again using one of the expressions which you've been given.
Your table design is now better, but this is not the end of the story. By including the State column in the same table as the City column the table is not normalized to Third Normal Form (3NF) as State is functionally determined by City. 3NF requires that all non-key columns are functionally determined solely by the whole of the table's primary key, which City might not be of course. Your table would thus be open to the risk of update anomalies.
Another problem is that city names can legitimately be duplicated, and there are numerous examples of this both in the USA and the UK. The table, therefore, should contain a CityID column of long integer number data type, referencing the numeric primary key, usually an autonumber, of a separate Cities table, which will also contain a City column with the city names. Two or more cities of the same name can then be included, with separate distinct CityID values.
However, the plot thickens even further as in the USA a single city can be in more than one state, Kansas City being an example, so there is a many-to-many relationship type between cities and states. This is modelled in the usual way by a table which resolves the relationship type into two one-to-many relationship types. This is illustrated in the image below of the model for the attached demo file:
In the above Regions is analogous to States in the USA. I've used the generic term because the demo uses international data, so different countries have different regional structures. Here in the UK County is the regional unit for instance.
Post codes such as Zips codes are simpler to handle, as these can be related to Cities, as shown above. A city will usually include multiple post codes, and the same post code might span city boundaries.
Decomposing your single table would require the execution of a set of 'update' and 'append' queries in a specific order. Without knowing the exact structure of your table I can't give you precise details of this, but if you'd care to post an empty copy of the table here, I'd be happy to let you have a file with the necessary queries to decompose it into a model like that illustrated above.