请考虑以下事项:
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提出的建议。
答案 0 :(得分:0)
通常我会在sql-server中创建一个函数。因为您不想检索所有行并将它们本地比较。它应该做类似于介于两者之间但首先剥离字母表的东西。该函数阻止实现代码两次以上。
答案 1 :(得分:0)
我认为为了做一个BETWEEN,你可以将字母转换成数字(01到26) 所以
UK AA1234 AG4321 Truck 1
变为
UK 01011234 01074321 Truck 1
小心零!他们需要在那里。
答案 2 :(得分:0)
这取决于您的区域在实际地理位置上的接近程度。
查看其他用户的问题 - Zipcode based search
此外,另一个例子是英国邮政编码区域的地图 http://www.freemaptools.com/uk-postcode-map.htm
我的观点基本上是在两个连续数字之间进行选择只能达到一定程度,例如像县一样的主要地理标识符,规则可能会因国家而异。
答案 3 :(得分:0)
我使用下表和数据创建了一个测试:
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'之间根据alphabeth。可能不是你所期望的。