怎么针对一个字段采用文本和数字复合排序

   阅读
如何针对一个字段采用文本和数字复合排序?
譬如对于如下数据:
学号 姓名 系 班级
机械-1 张三 机械系 机08-2
机械-2 李四 机械系 机08-2
...
机械-11 钱六 机械系 机08-2
化工-1 李强 化工系 化08-2
机械-12 孙七 机械系 机08-2
化工-2 李刚 化工系 化08-2
...
化工-11 李明 化工系 化08-2
化工-12 李旺 化工系 化08-2
...

希望得到效果:
化工-1 李强 化工系 化08-2
化工-2 李刚 化工系 化08-2
化工-11 李明 化工系 化08-2
化工-12 李旺 化工系 化08-2
机械-1 张三 机械系 机08-2
机械-2 李四 机械系 机08-2
机械-11 钱六 机械系 机08-2
机械-12 孙七 机械系 机08-2


问题:如果单以学号字段排序,则得到的顺序:
化工-1 李强 化工系 化08-2
化工-11 李明 化工系 化08-2
化工-12 李旺 化工系 化08-2
化工-2 李刚 化工系 化08-2
机械-1 张三 机械系 机08-2
机械-11 钱六 机械系 机08-2
机械-12 孙七 机械系 机08-2
机械-2 李四 机械系 机08-2

具体要求是:先根据学号前半部分 根据文本排序,对于前半部分相同的,要根据"-"后面的数字升序排序。
请教各位帮看看提供些信息,或者是否有相关帖子供参考,多谢。





------解决方案--------------------


SQL SERVER 如下。 利用字符串处理函数把 / 分隔的各段取来来进行排序
SQL code
1> select * from tx;
2> go
port
------------------------------
pos2/1/1.2
pos12/0/0.1
Eth3/12/0.1
Eth3/2/1.2
Eth3/13

1> select port
2> from tx
3> order by left(port,CHARINDEX ('/', port)-1) ,
4>      SUBSTRING ( port ,CHARINDEX ('/', port)+1 , CHARINDEX ('/', port+'//',CHARINDEX ('/', port)+1)- CHARINDEX ('/', port)-1),
5>      SUBSTRING ( port ,CHARINDEX ('/', port+'//',CHARINDEX ('/', port)+1)+1 ,
6>              CHARINDEX ('/', port+'//',CHARINDEX ('/', port+'//',CHARINDEX ('/', port)+1)- CHARINDEX ('/', port)+1)-1);
7> go
port
------------------------------
Eth3/12/0.1
Eth3/13
Eth3/2/1.2
pos12/0/0.1
pos2/1/1.2

(5 rows affected)