String-parsing in SQL is rommelig en heeft de neiging broos te zijn. Ik denk meestal dat het het beste is om dit soort taken helemaal buiten SQL uit te voeren. Dat gezegd hebbende, gezien de mini-specificatie hierboven, is het mogelijk om de gegevens in de gewenste velden te parseren, zoals:
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
Houd er rekening mee dat u uw tabelnaam moet vervangen door wat ik adressen heb genoemd in de bovenstaande subquery.
U kunt dit in actie zien tegen uw voorbeeldgegevens hier .