SQL Server 2008 - разделение адресного поля - PullRequest
1 голос
/ 13 января 2012

У меня есть адресный столбец, который содержит адрес, штат и почтовый индекс. Я хотел бы выделить адрес, пригород, штат и почтовый индекс в отдельные столбцы, как это можно сделать, поскольку длина адреса является переменной, есть ^ для разделения адреса и «других» деталей. Штат может содержать 2 или 3 символа, а почтовый индекс всегда 4 символа.

PostalAddress                            TO BE  Address   Suburb       State  Postcode
28 Smith Avenue^MOOROOLBARK VIC 3138^    28 Smith Avenue  MOOROOLBARK  VIC    3138
16 Farr Street^HEYFIELD VIC 3858^        16 Farr Street   HEYFIELD     VIC    3858
17 Terry Road^LOWER PLENTY VIC 3093^     17 Terry Road    LOWER PLENTY VIC    3093  

Ответы [ 2 ]

5 голосов
/ 13 января 2012

Разбор строк в 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

Обратите внимание, что вам потребуется заменить имя таблицы на то, что явызываемые адреса в вышеприведенном подзапросе.

Вы можете увидеть это в действии против ваших образцов данных здесь .

0 голосов
/ 28 ноября 2016

В моем случае это просто получение пятизначного числа из строки в виде почтового индекса:

Ниже мой код:

Select SUBSTRING([Column or string],patindex('%[0-9][0-9][0-9][0-9][0-9]%',[Column or string]),5) AS 'Postcode'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...