0

考虑以下:

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

有些国家的邮政编码混合使用字母和数字,有些国家只使用数字。

有没有一种简单的方法可以在给定邮政编码的情况下找到相应的送货卡车(邮政编码范围)。

我尝试过使用 between,但它似乎对我不起作用。也许我需要为每个国家/地区的邮政编码创建一些规则?

可以用 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

4 回答 4

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”之间。可能不是你所期望的。

于 2013-09-11T12:05:40.817 回答
0

这取决于您的区域在实际地理接近度方面需要有多好。

查看其他用户的问题 - 基于邮政编码的搜索

另外,作为另一个例子,这里是英国邮政编码区域的地图 http://www.freemaptools.com/uk-postcode-map.htm

我的观点基本上是,在两个连续数字之间进行选择只会在一定程度上起到作用,比如像县这样的主要地理标识符,并且规则可能会因国家而异。

于 2013-09-11T10:27:00.150 回答
0

通常我会在 sql-server 中创建一个函数。因为您不想检索所有行并在本地进行比较。它应该做一些类似的事情,但首先剥离字母。该函数可防止两次以上的代码实现。

于 2013-09-11T08:50:56.010 回答
0

我认为为了做一个 BETWEEN,你可以将字母转换为数字(01 到 26)所以

UK AA1234 AG4321 Truck 1

变成

UK 01011234 01074321 Truck 1

当心零!他们需要在那里。

于 2013-09-11T08:58:50.537 回答