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

Sql 当字段为空邮政编码时显示空值,sql,zipcode,Sql,Zipcode,我正试图弄明白这一点。我正在处理邮政编码,但我正在尝试添加一个整体函数,该函数将执行以下操作: 如果您正在查看的字段为空,则返回/写入新字段为空 目前正在发生以下情况:小于5个字符的所有内容都会得到前导零,如果前导零为空,则会得到00000 更新: 你期望的结果是什么?5位数还是9位数的拉链?让我知道,我可以更新以更好地工作 更仔细地审视你的逻辑,根据你想要的结果,这可能不起作用 第一次更新是将zip设置为9位,但底部的2位将其限制为5位。那么,如果使用case语句,会得到不一致的结果吗 您可能

我正试图弄明白这一点。我正在处理邮政编码,但我正在尝试添加一个整体函数,该函数将执行以下操作:

如果您正在查看的字段为空,则返回/写入新字段为空

目前正在发生以下情况:小于5个字符的所有内容都会得到前导零,如果前导零为空,则会得到00000

更新:

你期望的结果是什么?5位数还是9位数的拉链?让我知道,我可以更新以更好地工作

更仔细地审视你的逻辑,根据你想要的结果,这可能不起作用

第一次更新是将zip设置为9位,但底部的2位将其限制为5位。那么,如果使用case语句,会得到不一致的结果吗

您可能需要对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

您使用的是哪种类型的SQL?女士、我的朋友等?此外,您还可以使用案例陈述,并根据您的技术进行一次更新。这会满足你的需要。当您进行如上所述的更新时,如果第一次更新运行,那么第二次更新仍然可以在相同的记录上再次运行,如果您使用不会发生的case语句,我会在我的回答中添加一个更新,要求澄清示例数据和所需/实际结果以及数据库标记,这将非常有帮助。
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