在邮政编码范围内查找邮政编码

时间:2013-09-11 08:42:38

标签: c# sql entity-framework-4 zipcode

请考虑以下事项:

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提出的建议。

4 个答案:

答案 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。可能不是你所期望的。