尝试格式化Zip代码时,为什么IIF语句的TRUE部分不能正确评估?

时间:2019-02-20 15:53:49

标签: sql ms-access

我的一个表中有一个ZipCode字段。

大多数值是典型的5位邮政编码,但是其中一些带有破折号和另外的4位。该字段设置为文本数据类型。

我的问题是,我想在适当的时候保留前导零,而不是截断末尾有另外4位数字的邮政编码。

当前值为以下值之一(所有文本数据类型):

  • 5429
  • 34567
  • 21134-8733

预期结果应为以下内容:

  • 05429
  • 34567
  • 21134-8733

我创建了以下查询。它无法正常工作,仅返回该字段的原始值。

UPDATE [Export file2] 
SET [Export file2].ZipCode = 
IIf(Len([Export file2].[ZipCode])<6,Format([Export file2].[ZipCode],"00000"),[Export file2].[ZipCode]);

2 个答案:

答案 0 :(得分:1)

格式化不会格式化文本字段,因此请首先将数值设置为数字:

UPDATE [Export file2] SET [Export file2].ZipCode = IIf(Len([Export file2].[ZipCode])<6,Format(Val([Export file2].[ZipCode]),"00000"),[Export file2].[ZipCode]);

答案 1 :(得分:0)

如果您可以提供一个示例,说明所使用的每种数据类型以及每种数据的预期结果。

假设我已正确理解您要实现的目标,则可以通过以下方式使用Right函数:

UPDATE [Export file2] 
SET [Export file2].ZipCode = 
IIf
(
    Len([Export file2].[ZipCode]) < 6,
    Right("00000" & [Export file2].[ZipCode],5),
    [Export file2].[ZipCode]
)

或者,如果您还想确保邮政编码的“其他”类型也具有适当的前导零(假设值始终始终为10个字符),则可能以下是合适的:

UPDATE [Export file2] 
SET [Export file2].ZipCode = 
Right("00000" & [Export file2].[ZipCode], IIf(Len([Export file2].[ZipCode]) < 6,5,10)