譬如对于如下数据:
学号 姓名 系 班级
机械-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> goport------------------------------pos2/1/1.2pos12/0/0.1Eth3/12/0.1Eth3/2/1.2Eth3/131> select port2> from tx3> 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> goport------------------------------Eth3/12/0.1Eth3/13Eth3/2/1.2pos12/0/0.1pos2/1/1.2(5 rows affected)