एसक्यूएल में स्ट्रिंग पार्सिंग गन्दा है और भंगुर हो जाता है। मुझे आमतौर पर लगता है कि एसक्यूएल के बाहर इस तरह के कार्यों को पूरी तरह से करना सबसे अच्छा है। उस ने कहा, ऊपर दिए गए मिनी-स्पेक को देखते हुए, डेटा को उन क्षेत्रों में पार्स करना संभव है जो आप चाहते हैं:
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
ध्यान दें कि उपरोक्त सबक्वायरी में मैंने जो पतों को बुलाया है, उसके लिए आपको अपना टेबल नाम बदलने की आवश्यकता होगी।
आप इसे अपने नमूना डेटा के विरुद्ध कार्रवाई में देख सकते हैं यहां ।