当字段为空邮政编码时显示空值

时间:2018-11-30 14:16:36

标签: sql zipcode

我正在尝试解决这个问题。我正在操纵邮政编码,但是我试图添加一个整体功能来执行以下操作:

  

如果您要查看的字段为空白(EMPTY),请在新字段中返回/写入(BLANK)。

当前正在发生以下情况:少于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 :(得分:1)

更新:

您想要的结果是什么? 5位或9位邮编?让我知道,我可以更新以更好地工作

更仔细地查看您的逻辑,这可能无法正常工作,具体取决于您想要的结果。

第一次更新是将zip设置为9位数字,但底部2位将其限制为5位数字。因此,如果使用case语句,您将得到不一致的结果?

您可能需要对5位或9位数字的大小写进行2次更新,并进行一次清理以清除数据(删除-)(或可以将其合并为其他数字)。

取决于您的技术,此技巧在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