排序:字符型数据(80分)

  • 主题发起人 主题发起人 OnlyD4
  • 开始时间 开始时间
O

OnlyD4

Unregistered / Unconfirmed
GUEST, unregistred user!
我的interbase数据库中有一个字段用来存放字符型数据,实际上大部分是
数字,比如'345','42','120'...但是也有纯字符的:'under fixing'...
纯字符是任意的,没有规律.
现在要按照这个字段中可以转化为数字的纪录排序,排序按照数值的大小,
我自己的方法不好,问问大家看,有什么好方法
 
方法很多,至于排序的问题,最简单的是“冒泡”法。不知你数据结构的知识掌握
多少,根据数据结构的原理你可用折半查找、二叉树等方法。
至于实现,我想你可用:
1、用单循环链表/动态数组暂存数据库的数值字段;
2、利用上面的查找算法建立排序过程,顺便将记录编号包括在内。
3、将排序好的链表/动态数组从头开始输出,并控制着数据库的记录移动。
这样就可达到你的目的。
本人过去编写的CNC仿真系统就采用了十字循环链表,那是Turbo Pascal,现在也不
知去向了!还是你自己努力吧!
 
太厉害了!在数据库中还想用什么冒泡?

想个办法把字符放到右对齐的位置,前在不足的用空格补上,

然后按该字段排序就行了。
 
你的意思是一个字符型字段中,其中是数字形式的纪录按照数字大小排序?
1.你可以先select distinct field from your table,获得你这个字段有
那些不同的值
2.再找出这些值中那些不可以用strtoint转化为数字,用一个list记录下来
3.用程序生成一条SQL: select cast(yourfield as Integer) from yourtable
where yourfield<>....
order by yourfield
其中where yourfield<>...取你list中所有值组成,过滤掉那些不能转化为数字
的字符.
 
yifeng : 你的程序LOCAL SQL支持吗.
wuyi的方法是标准方法,还不行吗!
 
sherman, onlyd4用的是interbase, 支持的说
local sql当然也支持,我用的都是标准sql呀.

wuyi的方法不错,可是那些非数字字符的纪录怎么处理?
我想onlyd4要返回一个数据集的话,用我的方法就去掉了非数字字符的纪录
 
多人接受答案了。
 
后退
顶部