我正在尝试解决这个问题。我正在操纵邮政编码,但是我试图添加一个整体功能来执行以下操作:
如果您要查看的字段为空白(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
答案 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