Представление нулевых значений, когда поле имеет нулевые почтовые индексы - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь понять это.Я манипулирую почтовыми индексами, но пытаюсь добавить общую функцию, которая будет выполнять следующее:

Если поле, которое вы просматриваете, пустое (ПУСТО), возврат / запись (ПУСТО) вновое поле.

В настоящее время происходит следующее: все, что меньше 5 символов, получает либо начальный ноль, либо, если оно пустое, оно получает 00000.

      update ImportStagingContact
         set zip = '0' + zip
       where len(zip) = 8
         and ImportLogID = @nImportLogID

      update ImportStagingContact
         set zip = replace(zip, '-', '')
       where len(zip) = 10
         and charindex('-', zip) > 0
         and ImportLogID = @nImportLogID

      update ImportStagingContact
         set zip = right('00000' + zip, 5)
       where len(zip) < 5
         and ImportLogID = @nImportLogID

      update ImportStagingContact
         set zip = left(zip, 5)
       where len(zip) = 9
         and ImportLogID = @nImportLogID

1 Ответ

0 голосов
/ 30 ноября 2018

ОБНОВЛЕНИЕ:

Каковы ваши желаемые результаты?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
...