对数据库的某一字段进行排序

cherish_55 2009-09-16 09:10:46
数据库字段名称为:编号,类型为:文本。用户输入的内容有:(1)纯数字类型:12,056;(2)字母加数字:FG-ADE-100
FG-ADE-1001,GH-100,GH-156............排序后结果如下:
12
056
GH-100
GH-156
FG-ADE-100
FG-ADE-1001

这样该怎么排序?一点思路都没有。字母的个数是不定的。
...全文
634 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhone99 2009-09-16
  • 打赏
  • 举报
回复
debug.print MySql
拿到数据库中试
cherish_55 2009-09-16
  • 打赏
  • 举报
回复
MySql1 = "select [工程编号]from systest_number_manage where"
MySql2 = "select [工程编号]from sysBackupOrSubmit where"
MySql1 = MySql1 + " ([试验编号]='" & TestCode & "')"
MySql2 = MySql2 + " ( ([试验编号]='" & TestCode & "')"
MySql=MySql1 + " union " + MySql2
MySql = MySql + " order by len(工程编号),工程编号"

辛鹤 2009-09-16
  • 打赏
  • 举报
回复
select *
from 你的表名
order by len(你的字段名),你的字段名
Tiger_Zhao 2009-09-16
  • 打赏
  • 举报
回复
总结一下你的编码规则:
1)编码由两部分组成:字母(包括"-") + 数字
2)字母部分可以省略
3)按照先字母、再数字的次序排列
4)数字的排序按照值的大小排列

由于数据库的字符串拆分不是很方便,建议在表中添加两个冗余字段:{编码字母 文本,编码数字 整数}
程序在更新、插入记录时,同时将编码拆分成两部分写入冗余字段,成为:
工程编码    编码字母 编码数字
----------- -------- --------
12 12
056 56
GH-100 GH- 100
GH-156 GH- 156
FG-ADE-100 FG-ADE- 100
FG-ADE-1001 FG-ADE- 1001
----------- -------- --------


查询就可以这样写
select [试验序号],[试验编号],[工程编号],[报告编号],[文件名称]
from systest_number_manage
where ...
order by [编码字母],[编码数字]
jhone99 2009-09-16
  • 打赏
  • 举报
回复
全部sql贴出来
cherish_55 2009-09-16
  • 打赏
  • 举报
回复
MySql=MySql+"order by len(工程编号),工程编号"
我这样写过,在数据库里试,提示查询找不着表"",当把查询备份表的sql2语句删掉。将"order by len(工程编号),工程编号"放在sql1后就能查出结果。
rmini 2009-09-16
  • 打赏
  • 举报
回复
select *
from mytable
order by 编号
jhone99 2009-09-16
  • 打赏
  • 举报
回复
order by 放在最后
cherish_55 2009-09-16
  • 打赏
  • 举报
回复
恩,我知道怎么回事了,还有一个问题:这里的MySql = MySql1 + " union " + MySql2,MySql1是查询表TestNumberManage,MySql2是查询备份表sysBackupOrSubmit,sysBackupOrSubmit 是在数量达到一定程度时才会出现。我接着这个sql语句写:MySql=MySql+"order by len(工程编号),工程编号" 不行,
怎样才能让不管表sysBackupOrSubmit有没有,这个+"order by len(工程编号),工程编号"都能有效?
没有这个表,就从TestNumberManage查找,如果有这个表,就从这两个表查。
jhone99 2009-09-16
  • 打赏
  • 举报
回复
debug.print MySql1
拿到数据库中试
cherish_55 2009-09-16
  • 打赏
  • 举报
回复
结果用一个listview显示,单击listview的标题栏“工程编号”,现示的顺序就按照我刚才说的。
MySql1 = "select [试验序号],[试验编号],[工程编号],[报告编号],[文件名称] from systest_number_manage where"
MySql1 = MySql1 + " ([试验编号]='" & TestCode & "')"
MySql1 = MySql1 + " order by [工程编号] Asc"
下面是添加到listview
Do Until pblrecord.EOF
If Not IsNull(pblrecord!工程编号) Then ItmX.SubItems(2) = pblrecord!工程编号
pblrecord.move next
loop
jhone99 2009-09-16
  • 打赏
  • 举报
回复
怀疑你的其他部分有问题,其他部分你不肯贴出来,你把debug.print sql获得的结果拿到数据库中试
cherish_55 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jhone99 的回复:]
name是我的字段名,要换成你的字段
[/Quote]
这个我知道啊,用得是我的表和字段。
我这里的sql用的是sql+"order by [工程编号] asc",我改成"order by len(工程编号),工程编号"
jhone99 2009-09-16
  • 打赏
  • 举报
回复
你的sql贴出来
cherish_55 2009-09-16
  • 打赏
  • 举报
回复
FG-ADE-100 排在 GH-156 后面,这个没有要求。只要能保证单纯数字的排在前面并且按照升序排列。含有字母的按照相同字母的升序排列,所以FG-ADE-100 和 GH-156的前后顺序没有要求,能保证FG-ADE-段按升序排列后再排GH-段就行,相同段内按最后数字的升序排列。
jhone99 2009-09-16
  • 打赏
  • 举报
回复
select *
from 你的表名
order by len(你的字段名),你的字段名
jhone99 2009-09-16
  • 打赏
  • 举报
回复
name是我的字段名,要换成你的字段
cherish_55 2009-09-16
  • 打赏
  • 举报
回复
我怎么试不对呢,其中的name就是字段名称吧,我要按升序排列,直接用 select * from sysusers
order by len(name),name 不行,这样 select * from sysusers order by len(name) asc 也不行。问题出在哪里
of123 2009-09-16
  • 打赏
  • 举报
回复

能明确一下你的排序规则吗?

FG-ADE-100 排在 GH-156 后面,是因为总长度长,还是文字部分长?

jhone99 2009-09-16
  • 打赏
  • 举报
回复
测试成功

select *
from sysusers
order by len(name),name

加载更多回复(6)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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