高分求一个算法,那位朋友算法能力强的,帮忙想想,谢!(100分)

  • 主题发起人 主题发起人 ralin
  • 开始时间 开始时间
R

ralin

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下数据,在文本中:
13039090
13039091
13039092
13039093
13039094
13039095
13039096
13039097
13039098
13039099

可以看出这个是一些列8位数,因为他们是连续的,就是最后一位从0-9结束,所以现在有个规则如此,如果有连续的类似的10个数,那么他们就可以用一个7位数来表示这10个连续的8位数,那么上面的数据表示为1303909,如下数据:

13039180
13039181
13039182
13039183
13039184
13039185
13039186
13039187
13039188
13039189
则表示为1303918
请问大家有什么办法可以把一个文本里面的这些数据转换为一个标准的7位数呢?
这些文本里面的标准格式如下
86|0|13039090|433|
86|0|13039091|433|
86|0|13039092|433|
86|0|13039093|440|
86|0|13039094|440|
86|0|13039095|433|
86|0|13039096|433|
86|0|13039097|433|
86|0|13039098|433|
86|0|13039099|433|
 
对于小于7位数据的处理,我已经接近了,就是不知道8位的该如何做?
提供点思路,谢谢
 
贴一些测试数据看看,对于那些不连续的怎么处理。
 
看了一下,好像都是连续的,不好意思,现在只把8位数据的贴出来
86|0|13039090|433|
86|0|13039091|433|
86|0|13039092|433|
86|0|13039093|440|
86|0|13039094|440|
86|0|13039095|433|
86|0|13039096|433|
86|0|13039097|433|
86|0|13039098|433|
86|0|13039099|433|

86|0|13039180|433|
86|0|13039181|440|
86|0|13039182|440|
86|0|13039183|433|
86|0|13039184|433|
86|0|13039185|433|
86|0|13039186|433|
86|0|13039187|433|
86|0|13039188|433|
86|0|13039189|433|

86|0|13039290|448|
86|0|13039291|448|
86|0|13039293|448|
86|0|13039294|435|
86|0|13039295|448|
86|0|13039296|448|
86|0|13039297|448|
86|0|13039298|448|
86|0|13039299|448|
 
8位和七位没什么区别把,你七位都弄出来了,八位的怎么还成问题了?
还有后面的433,440对前面的有影响么?
 
放到数据库中,至少两个字段,第一个字段存储前7位,第二个字段存储最后1位,然后Group By第一个字段,求Sum(第二个字段),若Sum=45(0+1+2+3+4+5+6+7+8+9)则可以认为满足要求了
 
后面的数据不管,只管中间的那列,目前的问题是有5,6,7,8位数据,标准要求是都弄成7位,小于7位的好变7位,可是大于8位的就有点麻烦啊!
我是8位变7位呢
 
放到数据库中,至少两个字段,第一个字段存储前7位,第二个字段存储最后1位,然后Group By第一个字段,求Sum(第二个字段),若Sum=45(0+1+2+3+4+5+6+7+8+9)则可以认为满足要求了
你这到是个办法啊,赫赫,
我在数据库中怎么用查询直接操作呢?
因为我这些数据导入都是至少5w条,所以导入的时候我是一次性导入的,客户要求快速的
 
先全部导入到数据库,然后分离出中间的8位
下面只考虑这8位的数据,用一个字段存储,假设为FField1
则应该先重复的只取一次,然后用sum=45或count=10
select L7
(select distinct left(FField1,7) AS L7,right(FField1,1) AS R1
from tbl) As AA
group by L7
having count(*)=10
 
5万条不算多嘛,哈哈
谢谢"绵绵细雨"先生的补充说明
 
代码:
select substring(cast(f3 as varchar),1,7) f3 ,sum(cast(substring(cast(f3 as varchar),8,8) as int)) b
from abc
where len(f3)=8
group bysubstring(cast(f3 as varchar),1,7)
 
数据不多,可是客户那个是个普通电脑,连服务器都没有
 
如果你的都是连续的你就直接字符串判断长度,然后去掉最后第八位不行么?
 
后退
顶部