字冠匹配问题

各位大虾,本人在坐电信计费软件的时候,遇到一个棘手的问题,请各位大虾帮
帮忙。
在电信的计费中,是根据被叫的字冠来计算费用的,所谓字冠就是一个号码的前面几位数字。比如说,被叫是057188856777,我可以设置一个字冠位0,费用为每6秒6分钱,因为被叫是057188856777,0是这个被叫的前1位,所以被叫匹配字冠0。如果我想给打倒0571这个区号的电话另外设置计费方式,比如每6秒要7分钱,那我可以设置另外的字冠0571,这时候,被叫匹配于字冠0河0571,这个时候就采用就长匹配,我认为这个被叫匹配于0571。
现在问题是我采用什么数据结构来存储这些字冠数据,并采用何种算法,使得对于一个号码,我能够快速得取得其匹配字冠呢??如果我得字冠数量很多呢??
---------------------------------------------------------------

字冠数据结构表table
字冠 费用
0 6
0517 7
……

取得其匹配字冠:

select a.字冠,a.费用
from table a
join
(select max(len(字冠)) 长度
from table
where 电话号码 like RTRIM(字冠)+'%' ) as b
on len(a.字冠)=长度
and 电话号码 like RTRIM(a.字冠)+'%'

---------------------------------------------------------------

我做过,但不是电信的,是酒店的,与楼上的相似
不但我用的是视图,其中区码表来源来ucdos下的区码,之后生成.txt转换为.dbf后
用视图带“? ” ,requery() ,_tally,来完成的,在10万记录后,大概不后超过0.1秒,但还是有问题,
当时我们的程控交换机是串口输出的,要求每0.01秒读一次交换机,数据区码检索就是个问题。不过我想现在应该没问题了,机器速度很快了,在10万记录内,以view方式检索应该在0.01秒内.

---------------------------------------------------------------

我们那时是以分计的,交换机提供32位的字串,分别是
是区码(含0),被叫号,主叫号,开始时间,结束时间,时长(秒)
只用建立一个表:区码,费用就可以了。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus