譬如对于如下数据:
学号 姓名 系 班级
机械-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)