高手进,VF中字母+字符+数字排序问题!!!急!急!急!

jaychencz 2012-02-19 08:24:17
vf中下面的6个记录,最终的期望排序结果为下面所显示的那样,
Y44-140708
Y44-140909
Y44-141109
Y441-40908
Y441-41009
Y441-41110
实际排序后,显示的结果为:
Y44-140708
Y441-40908
Y44-140909
Y441-41009
Y44-141109
Y441-41110
怎么解决???
...全文
585 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenshanzhong 2012-03-20
  • 打赏
  • 举报
回复
实际排序后,显示的结果为:
Y44-140708
Y441-40908
Y44-140909
Y441-41009
Y44-141109
Y441-41110

这个排序的结果非常奇怪,如果是按升序排序的,那么排序结果表明第二行的第三个字符"1"要大于第一行的第三个字符"-",可是又小于第三行的第三个字符"-",也就是说第一行的第三个字符"-"要小于第三行的第三个字符"-",所以这二个字符实际上并不是同一个字符,我怀疑其中有些字符"-"是全角输入的,请楼主仔细检查一下。
sdta2012 2012-03-02
  • 打赏
  • 举报
回复
*----VFP6.0
index on SUBSTR(序号,1,at("-",序号)-2) to xh
*----VFP9.0
INDEX on STREXTRACT(序号,"","-") TO xh
lygcw9602 2012-02-29
  • 打赏
  • 举报
回复
这个方法不错,试下
index on val(SUBSTR(序号,2,at("-",序号)-2)) to xh
lygcw9602 2012-02-29
  • 打赏
  • 举报
回复
Create cursor ttt (f1 C(20))
Insert into ttt (f1) values ('Y44-140708')
Insert into ttt (f1) values ('Y441-40908')
Insert into ttt (f1) values ('Y44-140909')
Insert into ttt (f1) values ('Y441-41009')
Insert into ttt (f1) values ('Y44-141109')
Insert into ttt (f1) values ('Y441-41110')
*----VFP6.0
index on val(SUBSTR(序号,2,at("-",序号)-2)) to xh
*----VFP9.0
INDEX on VAL(STREXTRACT(序号,"Y","-")) TO xh
lygcw9602 2012-02-29
  • 打赏
  • 举报
回复
VFP9.0:
INDEX on VAL(STREXTRACT(序号,"Y","-")) TO xh
都市夜猫 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lc_apple 的回复:]
如果都像这6条记录的话,只需要用后四位进行排序就可以了

index on subs(字段名,7) to px
[/Quote]
lc_apple 2012-02-19
  • 打赏
  • 举报
回复
如果都像这6条记录的话,只需要用后四位进行排序就可以了

index on subs(字段名,7) to px
xuzuning 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dkfdtf 的回复:]
上面还是下面是你要的结果?如果上面的话,跟这个贴一样,排序前先执行 Set Collate To "MACHINE" 就是上面的结果

Set Collate To "MACHINE"
Select f1 from ttt order by 1
[/Quote]正解
dfwxj 2012-02-19
  • 打赏
  • 举报
回复
你这根本就不适用“排序”,没有排序规则。

你是将所有数据分成两部份,一部份是“44”,另一部份是“441”,然后两部份依次取一条记录插入。

或者就是你想排序时忽略“-”号。设计思路有问题,这种数据看了就别扭
lygcw9602 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dkfdtf 的回复:]
上面还是下面是你要的结果?如果上面的话,跟这个贴一样,排序前先执行 Set Collate To "MACHINE" 就是上面的结果

Set Collate To "MACHINE"
Select f1 from ttt order by 1
[/Quote]
同意楼上的看法
都市夜猫 2012-02-19
  • 打赏
  • 举报
回复
上面还是下面是你要的结果?如果上面的话,跟这个贴一样,排序前先执行 Set Collate To "MACHINE" 就是上面的结果

Set Collate To "MACHINE"
Select f1 from ttt order by 1
jaychencz 2012-02-19
  • 打赏
  • 举报
回复
to #1楼:
没写完全,这6个记录是表里面一个字段下的记录,该字段下面还有很多记录,建立索引后,排序的时候,其他记录没什么问题,就这几个记录出现问题,该怎么排序解决,达到预期的效果!
排序的时候不是按照从左往右的顺序一个字符一个字符比较的吗?
都市夜猫 2012-02-19
  • 打赏
  • 举报
回复
Create cursor ttt (f1 C(20))
Insert into ttt (f1) values ('Y44-140708')
Insert into ttt (f1) values ('Y44-140909')
Insert into ttt (f1) values ('Y44-141109')
Insert into ttt (f1) values ('Y441-40908')
Insert into ttt (f1) values ('Y441-41009')
Insert into ttt (f1) values ('Y441-41110')

Select f1 from (Select strtran(f1, '-', ''), f1 from ttt order by 1) a

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧