格式化英国邮政编码以进行存储
Posted
技术标签:
【中文标题】格式化英国邮政编码以进行存储【英文标题】:Formatting UK postal codes for storage 【发布时间】:2011-11-07 15:03:34 【问题描述】:我想在数据库中存储英国邮政编码。没有空格可以存储那些邮政编码吗?
【问题讨论】:
是的,它是安全的。所有英国邮政编码都以 1 个数字和两个字母结尾。然后是一个空间和剩下的任何东西。伦敦邮政编码是具有各种起始代码的好例子,但无论如何最后 3 个始终是xyy
x-digit y-alpha。
【参考方案1】:
可以存储不带空格的邮政编码,但绝对建议在显示/输出时正确格式化它们。
您可以查看邮政编码 here 的允许格式。空格后面总是有 3 个字符,因此很容易重新插入。
【讨论】:
【参考方案2】:最后 3 个总是xyy
x
数字0-9
yy
Alpha A-Z
之前的任何内容都是网格参考的第一部分,并且有多种格式。
【讨论】:
【参考方案3】:我们存储邮政编码,我们接受任何格式、空格或无空格的输入输出,但随后会删除或更正输入以进行数据存储
我们发现在将数据用于其他用途时,这种方式效果更好
为什么要在没有空格的情况下存储?
【讨论】:
【参考方案4】:英国邮政编码有多种格式: list of formats
为什么不能存储空格?
【讨论】:
我可以用空格存储数据。我担心的是用户输入的邮政编码可能带有或不带有空格,甚至可能是破折号?我想确保数据库中的数据尽可能干净。【参考方案5】:正如其他人所说,删除所有空格并存储它们没有问题,如果这是您想要做的。如前所述,您始终可以在最后三个字符之前使用空格来格式化它们。
但是,我通常会以任何合理的格式使用它们,去掉所有空格,然后将它们与这一个额外的空间一起存储。存储要求不是问题,并且可以更轻松地按原样显示。您需要在以某种方式保存之前解析格式,因此您可以根据需要保存它。
【讨论】:
另一个优点是,如果您曾经对此数据进行任何分析或类似的操作(这可能证明很有价值),很容易将其分为两部分。您可以通过邮政编码的第一部分来识别人们来自哪里,在这种情况下,使用已经格式化的数据更容易做到这一点。【参考方案6】:删除空格通常是安全的。正如其他人所说,如果需要,您可以稍后重新插入空间。 Outcode 和 Incode 之间存在空格通常不会影响邮寄。英国邮政编码中不应包含任何非字母数字字符,因此如果您看到破折号,您可以安全地将其删除。
我在 Experian Data Quality 工作,如果您的目标是干净的数据,您可能需要考虑使用地址验证 Web 服务,例如我们的 Pro On Demand 产品。这将确保您捕获正确的邮政编码,因为它们会随着时间而改变,并且它的格式适合您的数据库。
【讨论】:
【参考方案7】:没有空格也可以存储,因为您始终可以在每个邮政编码字符串中添加一个空格 - 启发式非常简单。
正如其他一些用户非常乐于解释的那样,所有英国邮政编码都有两组数字和字母,用空格隔开。空格后面的组总是包含一个数字,然后是两个字母(因此,空格后面总是有三个字符)。空格前的组将有两个、三个或四个字符(请参阅此Wikipedia page)和下面的屏幕截图。
因此,您可以通过在倒数第三个字符之前添加一个空格来重新创建正确的间距。
在R
中,它看起来像这样(但同样的逻辑也适用于其他语言,例如Python
):
#list of example postcodes
postcodes = c("LS176JA", "OX41EZ", "A99AA")
#add space to each postcode in the list of example postcodes
for (postcode in postcodes)
last_three = str_sub(postcode, start = -3)
first_x = str_replace(postcode, last_three, "")
final_postcode = paste0(first_x, " ", last_three)
print(final_postcode)
返回:
[1] "LS17 6JA"
[1] "OX4 1EZ"
[1] "A9 9AA"
【讨论】:
以上是关于格式化英国邮政编码以进行存储的主要内容,如果未能解决你的问题,请参考以下文章