Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2008 - separando o campo de endereço


A análise de strings no SQL é confusa e tende a ser frágil. Eu geralmente acho que é melhor fazer esse tipo de tarefa fora do SQL completamente. Dito isto, dada a mini-especificação acima, é possível analisar os dados nos campos que você deseja assim:
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

Observe que você precisará substituir o nome da tabela pelo que chamei de endereços na subconsulta acima.

Você pode ver isso em ação nos seus dados de amostra aqui .