Penguraian string dalam SQL berantakan dan cenderung rapuh. Saya biasanya berpikir yang terbaik untuk melakukan tugas-tugas semacam ini di luar SQL sama sekali. Karena itu, mengingat spesifikasi mini di atas, dimungkinkan untuk mengurai data ke dalam bidang yang Anda inginkan seperti ini:
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
Perhatikan bahwa Anda perlu mengganti nama tabel Anda dengan apa yang saya sebut alamat di subkueri di atas.
Anda dapat melihat tindakan ini terhadap data sampel Anda di sini .