В колонке есть смесь между городом и штатом и просто городом. Я уже разделил город и штат, но как мне сохранить правильные поля города? - PullRequest
0 голосов
/ 30 сентября 2019

В моей таблице 2 столбца, которые мне нужно исправить. Первый столбец - «Город» и содержит смесь города и штата и только города. Второй столбец - «Состояние» и содержит смесь нулей и состояний. Важно отметить, что когда столбец Ciy содержит и город, и штат, столбец «Штат» имеет значение Null.

NEW YORK,NY | NULL
NEW YORK    | NY

Пока что я написал код, который разделяет столбец «Город»;тем не менее, если в столбце «Город» не указано состояние, он отображается как «», а затем столбец состояния заполняется значением «Город». Вторые два столбца ниже - это «City_Split» и «State2».

NEW YORK,NY | NULL | NEW YORK | NY
NEW YORK    | NY   | ''       | NEW YORK

До сих пор я пробовал использовать выражения case, но я просто запутался.

Я хочу:

NEW YORK,NY | NULL | NEW YORK | NY
NEW YORK    | NY   | NEW YORK | NY
SELECT
    CITY, CPS,
    SUBSTRING(CITY, 0, CHARINDEX(',', CITY, - 1)) AS CITY_SPLIT,
    SUBSTRING(CITY, CHARINDEX(',', CITY) + 1, LEN(CITY)) AS STATE2
FROM srcFlatFile.dbo.SWIFT AS SWIFT
WHERE (ISO_COUNTRY_CODE = 'US')

Я прошу прощения, если я не задал вопрос достаточно четко, я новичок в кодировании в целом.

1 Ответ

0 голосов
/ 30 сентября 2019
with data as (<your query>)
update data set city = city_split, state = state2
where charindex(',', city) > 0

Необходимо иметь дополнительное условие, ограничивающее обновление строками, которые необходимо обновить. Поскольку эти выражения требуют наличия запятой.

Этот подход - простой способ использовать select как есть. Но это действительно может (и должно?) Быть сделано без CTE следующим образом:

update srcFlatFile.dbo.SWIFT
set city = substring(city, 1, charindex(',', city) - 1),
       state = substring(city, charindex(',', city) + 1, 2)
where charindex(',', city) > 0
...