ОБНОВЛЕНИЕ:
Каковы ваши желаемые результаты?5-значный или 9-значный почтовый индекс?Дайте мне знать, и я смогу обновиться, чтобы работать лучше
Если присмотреться к вашей логике, это может не сработать, в зависимости от желаемых вами результатов.
Первое обновление устанавливает zip на 9 цифр, но нижние 2 ограничивают его до 5 цифр, как это выглядит.Таким образом, вы получите противоречивые результаты, если с помощью оператора case?
вам может потребоваться сделать 2 обновления для 5 или 9-значного регистра и одно для очистки данных (удалить -) (или можно объединить это в других).
В зависимости от вашей технологии, это должно работать в MSSQL.Вы можете изменить порядок оператора case, чтобы тот, который вы хотите запустить первым, был выше остальных.Если не MSSQL, логика должна быть одинаковой, синтаксис ошибки может быть другим.
UPDATE ImportStagingContact
SET zip =
CASE
-- to set to blank, maybe set to null if that is desired vs blank
WHEN len(ISNULL(zip, '') = 0 then ''
WHEN len(zip) = 8 THEN '0' + zip
WHEN len(zip) = 10 and charindex('-', zip) > 0 THEN replace(zip, '-', '')
WHEN len(zip) < 5 THEN right('00000' + zip, 5)
WHEN len(zip) = 9 THEN left(zip, 5)
END
where ImportLogID = @nImportLogID