Phân tích cú pháp chuỗi trong SQL là lộn xộn và có xu hướng dễ gãy. Tôi thường nghĩ rằng tốt nhất là nên thực hiện những loại nhiệm vụ này bên ngoài SQL. Điều đó nói rằng, với thông số kỹ thuật nhỏ ở trên, có thể phân tích cú pháp dữ liệu thành các trường bạn muốn như vậy:
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
Lưu ý rằng bạn sẽ cần thay thế tên bảng của mình cho những gì tôi đã gọi là địa chỉ trong truy vấn con ở trên.
Bạn có thể thấy điều này hoạt động dựa trên dữ liệu mẫu của mình tại đây .