求教一个SQL排序的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/14 16:30:19
我现在表里面有一个编号的字段 我想按照这个排序
比如编号的字段为 CODE,
建设现在几条数据的CODE字段为
IDCARD0001-1
IDCARD0001-2
IDCARD0001-3
IDCARD0002-1
IDCARD0002-2
IDCARD0002-3
如果我这么写 order by id desc 那么他得排序结果是
IDCARD0002-3
IDCARD0002-2
IDCARD0002-1
IDCARD0001-3
IDCARD0001-2
IDCARD0001-1,
我希望他得排序结果是
IDCARD0002-1
IDCARD0002-2
IDCARD0002-3
IDCARD0001-1
IDCARD0001-2
IDCARD0001-3
请问这样能实现么? 如果我还有个字段time 是按照CODE字段添加的时间记录的
请问如果 利用这个time字段 和CODE字段 达到 我希望的那种排序结果
我的是ORACLE数据库

不知你是什么sql
mysql可以
order by id desc, substring_index(id,'-',-1)
其他的也可以按这个思路截出最后一位。在排序。

实现当然是可以实现的,就是用字符串截取函数,把这个字段看成2个字段即可。但是这样很影响效率,因为不能使用索引,不知道你为什么不设计成2个字段?

公布一下标准答案:
order by left(Code,10) desc,Code

可以实现

首先substr(code,1,11)把code字段前11个字符提取出来,按照这个11个字符进行分组,剩下的字符就是1,2,3,再排下序即可

order by left(CODE,charindex('-',CODE)-1) DESC,time ASC
就是按照CODE的没有子号部分DESC,子号随TIME字段增加的,所以TIME ASC,这个是在MSSQL中的写法,其他数据库可能就是取的CODE的‘-’前部分的写法不一样
ORACLE:
order by SUBSTR(CODE,1,INSTR(CODE,'-')-1) DESC,time ASC