I always do this in PowerQuery now... but I'd do it like this:
1. split the string on the comma. The "left" side is City. The right side is State and Zip Code
2. Trim the State and ZipCode to remove the leading and trailing spaces.
3. Split the result on [Space] or double-space. then you get State (left) and Zip Code (right).
In a perfect world, if the data always follows the same pattern, this could be a way to achieve it.
SQL:
SELECT Customers.Address, Left([Address],InStr([Address],",")-1) AS City, Mid([Address],InStr([Address],",")+2,2) AS State, Mid([Address],InStrRev([Address]," ")+1) AS Zip
FROM Customers;