在邮政编码范围内查找邮政编码
本文关键字:邮政编码 查找 范围内 | 更新日期: 2023-09-27 18:30:51
请考虑以下事项:
CountryCode ZipCodeFrom ZipCodeTo Truck
-------------------------------------------
UK AA1234 AG4321 Truck 1
UK AG4322 AL9999 Truck 2
UK AM0000 AZ9999 Truck 3
UK BA0000 ZZ9999 Truck 4
SE 0000 3333 Truck 10
SE 3334 9000 Truck 11
SE 9001 9999 Truck 12
每条线代表一辆送货卡车负责的区域。
假设一个订单要运送到邮政编码AB4000,则应使用卡车1。邮政编码 5000 将是卡车 11
有些国家/地区在其邮政编码中使用字母和数字的组合,有些国家/地区仅使用数字。
有没有一种简单的方法可以在给定邮政编码的情况下找到腐蚀的送货卡车(邮政编码范围)。
我尝试过使用介于两者之间,但它似乎对我不起作用。也许我需要为每个国家/地区的邮政编码创建一些规则?
可以用 SQL 或 C# 求解
更新:
select * from PostalCode where CountryCode = 'DK' and 'AB4000' between ZipCodeFrom and ZipCodeTo
select * from PostalCode where CountryCode = 'DK' and 'AB4000' <= ZipCodeTo and 'AB4000' >= ZipCodeFrom
这是我尝试过的
我将尝试Wietze314提出的建议。
我认为为了做一个 BETWEEN,您可以将字母转换为数字(01 到 26)所以
UK AA1234 AG4321 Truck 1
成为
UK 01011234 01074321 Truck 1
小心零!他们需要在那里。
通常我会在sql服务器中创建一个函数。因为您不想检索所有行并在本地比较它们。它应该做一些类似于介于之间的事情,但首先剥离字母。该函数可防止实现代码两次以上。
这取决于您所在的地区在实际地理邻近度方面需要有多好。
查看其他用户的问题 -基于邮政编码的搜索
而且,作为另一个例子,这里是英国邮政编码区域的地图http://www.freemaptools.com/uk-postcode-map.htm
我的观点基本上是,在两个连续的数字之间进行选择只会在一定程度上是好的,就像像县这样的主要地理标识符一样,并且规则可能会因国家而异。
我用下面的表格和数据创建了一个测试:
CREATE TABLE [PostalCodes](
[CountryCode] [nvarchar](50) NULL,
[ZipCodeFrom] [nvarchar](50) NULL,
[ZipCodeTo] [nvarchar](50) NULL,
[TruckId] [nvarchar](50) NULL
)
insert into [PostalCodes]
values('UK','AA1234','AG4321','Truck 1');
insert into [PostalCodes]
values('UK','AG4322','AL9999','Truck 2');
insert into [PostalCodes]
values('UK','AM0000','AZ9999','Truck 3');
insert into [PostalCodes]
values('UK','BA0000','ZZ9999','Truck 4');
insert into [PostalCodes]
values('SE','0000','3333','Truck 10');
insert into [PostalCodes]
values('SE','3334','9000','Truck 11');
insert into [PostalCodes]
values('SE','9001','9999','Truck 12');
运行此选择,我得到预期的结果:
select *
from [PostalCodes]
where CountryCode ='SE'
and '0200' between ZipCodeFrom and ZipCodeTo
给卡车 10
将"0200"替换为"10000",您将获得卡车 10,因为根据字母表,"10000"介于"0000"和"3333"之间。可能不是你所期望的。