微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL邮政编码存在范围内

如何解决SQL邮政编码存在范围内

| 我遇到以下情况: 我有一张表格,其中列出了以下格式的邮政编码:
1234 AA (Dutch postcode)

2345 ZF

B-2345 (Belgium postcode)

B-4355
我有一个表,其中包含邮政编码范围:
PostcodeFrom

1000 AF                     
2000 ZF
B-1234

Postcodeto

1999 ZX
2999 ZF
B-1889
我正在寻找一种解决方案,如何在几个范围之间查找邮政编码值。 首先我在想
SUBSTRING(MyPostcode,1,4) BETWEEN SUBSTRING(PostcodeFrom,4) AND SUBSTRING(Postcodeto,4)
..但是字符仍然存在问题(甚至也没有考虑比利时的邮政编码)。 有人可以帮我吗? 你的 感谢您的回复! 您绘制的表还需要一个字段:RegionCode。 范围表: | RCode | PCodeFrom | PCodeto | | 001 | 1000 BA | 1999 ZZ | | 002 | 1000 AA | 1999 AZ | 请注意,如果邮政编码为1234 AC,则必须返回RegionCode:002比较数字并不难,但是如何比较字符呢?我有一个用AA-ZZ制作表的想法,其中每个组合都具有一定的INT值,但我希望有另一种更简单的方法。     

解决方法

您只能通过按字符类型将邮政编码的各个部分分成不同的列来可靠地做到这一点(忽略与邮政编码进行这种范围匹配的潜在不可靠性)。 我对荷兰邮政编码不太了解,但是如果格式正确,则可以创建一个表格,如下所示:
+-------+------+
| code  | city |
+-------+------+
| 1234  | AA   |
+-------+------+
拆分邮政编码将使您可以进行更细粒度的排序。 更新: 在查看了荷兰邮政编码的Wikipedia页面之后,看来这对所有邮政编码都适用。我的
code
和ѭ5labels标签不正确。 旁白:荷兰给人留下深刻印象的邮政编码格式给我留下了深刻的印象,而英国则需要巨大的正则表达式来确定格式是否有效,这给英国留下了深刻的印象。 更新2: 您的检查也可以使用字符,但是最好将邮政编码存储在带有ID的单独表中。上面的示例只是为了显示从数字中分离字符,因此您实际上想要的是:
mysql> select * from postcodes;
+------+-------+-------+
| id   | part1 | part2 |
+------+-------+-------+
|    1 |  1234 | AA    |
|    2 |  5678 | BB    |
+------+-------+-------+
存储范围时,请勿将邮政编码存储在
ranges
表中,而将条目的ID存储在
postcodes
表中,例如:
mysql> select * from ranges;
+-------------+---------------+-------------+
| region_code | postcode_from | postcode_to |
+-------------+---------------+-------------+
|           1 |             1 |           2 |
+-------------+---------------+-------------+
该记录显示“区域1是1234 AA到5678 BB” 例如,我将说邮政编码从0001 AA开始,然后移到0001 AB,一直到0001 ZZ,再到0002 AA,依此类推。这显然是不对的,但却证明了这一理论。您需要用此算法代替您用来定义邮政编码递增和递减的算法。 当您要查找“邮政编码3456 XY是否适合区域89?”时,可以将其拆分为字符和数字,然后检查值是否适合范围。使用我的算法,我检查: 数字部分是否大于
postcode_from
的数字部分? 如果大于,则小于less11ѭ的数字部分吗? 如果您同时满足这两个条件,请检查字母-这是重要的一环-MySQL的字符集排序规则确实允许您说“ 12小于13”,您可以:
WHERE \'AB\' < part2;
在您的“ 15”子句中。 使用这种方法,您可以找出哪个区域的起点和终点与您要测试的值相符。 它有点冗长,但无需进行任何转换即可使用。不过,您可能需要检查使用的排序规则是否适合您正在使用的特定邮政编码类型的字母顺序。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。