Анализът на низове в SQL е объркан и има тенденция да бъде крехък. Обикновено мисля, че е най-добре да изпълнявам този вид задачи извън SQL. Въпреки това, като се има предвид мини-спецификацията по-горе, е възможно да анализирате данните в полетата, които искате, така:
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
Обърнете внимание, че ще трябва да замените името на вашата таблица с това, което нарекох адреси в подзаявката по-горе.
Можете да видите това в действие спрямо вашите примерни данни тук .