SQL 服务器验证邮政编码
SQL Server validating postcodes
我有一个 table 包含邮政编码,但没有内置到条目表单中的验证,因此它们在数据库中的存储方式不一致,示例如下:
ID Postcode
001742 B5
001745
001746
001748 DY3
001750
001751
001768 B276LL
001774 B339HY
001776 B339QY
001780 WR51DD
我想使用这些邮政编码来映射距中心点的距离,但在我可以这样做之前,我需要将它们放入有效格式并过滤掉任何空白或不完整的邮政编码。
我考虑过使用
left(postcode,3) + ' ' + right(postcode,3)
要更正格式,但这不适用于像 'M6 8HD'
这样的邮政编码
我的目标是获取有效格式的邮政编码列表,但我不知道如何考虑不同长度的邮政编码。在 SQL 服务器中有没有办法做到这一点?
正如评论中所讨论的,有时从另一个角度看问题会提供一个简单得多的解决方案。
您有一个用户提供的任意输入列表,其中通常不包含正确的间距。您还有一个正确间隔的有效邮政编码列表。
您正试图解决在任意输入中找到正确位置以使其与有效代码列表相匹配的问题,而这在实践中极其困难。
但是,执行相反的任务 - 从有效邮政编码中删除空格 - 非常容易。所以我建议这样做。
在我们最近一轮的数据建模中,我们使用两个邮政编码列对地址进行建模 - PostCode
包含从任何来源提供的邮政编码,以及 PostCodeNoSpace
,一个去除空格的计算列PostCode
个字符。我们将后一列用于例如基于用户输入的搜索。如果您要永久保留有效邮政编码列表,您可能想对它做一些类似的事情 - 这样您就可以执行简单的 matches/lookups 然后将这些匹配项转换回具有空格的版本 - 这实际上是原始问题的解决方案!
我有一个 table 包含邮政编码,但没有内置到条目表单中的验证,因此它们在数据库中的存储方式不一致,示例如下:
ID Postcode
001742 B5
001745
001746
001748 DY3
001750
001751
001768 B276LL
001774 B339HY
001776 B339QY
001780 WR51DD
我想使用这些邮政编码来映射距中心点的距离,但在我可以这样做之前,我需要将它们放入有效格式并过滤掉任何空白或不完整的邮政编码。
我考虑过使用
left(postcode,3) + ' ' + right(postcode,3)
要更正格式,但这不适用于像 'M6 8HD'
这样的邮政编码我的目标是获取有效格式的邮政编码列表,但我不知道如何考虑不同长度的邮政编码。在 SQL 服务器中有没有办法做到这一点?
正如评论中所讨论的,有时从另一个角度看问题会提供一个简单得多的解决方案。
您有一个用户提供的任意输入列表,其中通常不包含正确的间距。您还有一个正确间隔的有效邮政编码列表。
您正试图解决在任意输入中找到正确位置以使其与有效代码列表相匹配的问题,而这在实践中极其困难。
但是,执行相反的任务 - 从有效邮政编码中删除空格 - 非常容易。所以我建议这样做。
在我们最近一轮的数据建模中,我们使用两个邮政编码列对地址进行建模 - PostCode
包含从任何来源提供的邮政编码,以及 PostCodeNoSpace
,一个去除空格的计算列PostCode
个字符。我们将后一列用于例如基于用户输入的搜索。如果您要永久保留有效邮政编码列表,您可能想对它做一些类似的事情 - 这样您就可以执行简单的 matches/lookups 然后将这些匹配项转换回具有空格的版本 - 这实际上是原始问题的解决方案!