Strengparsing i SQL er rodet og har tendens til at være skør. Jeg synes normalt, det er bedst helt at udføre den slags opgaver uden for SQL. Når det er sagt, givet mini-specifikationen ovenfor, er det muligt at parse dataene i de felter, du ønsker, sådan:
select
left(PostalAddress, charindex('^', PostalAddress) - 1) as street_address,
left(second_part, len(second_part) - charindex(' ', reverse(second_part))) as suburb,
right(second_part, charindex(' ', reverse(second_part))) as state,
reverse(substring(reverse(PostalAddress), 2, 4)) as postal_code
from (
select
PostalAddress,
rtrim(reverse(substring(reverse(PostalAddress), 6, len(PostalAddress) - charindex('^', PostalAddress) - 5))) as second_part
from Addresses
) as t1
Bemærk, at du skal erstatte dit tabelnavn med det, jeg har kaldt adresser i underforespørgslen ovenfor.
Du kan se dette i aktion mod dine eksempeldata her .