请教一个字段排序的问题 我有一字段类型为Varchar的,格式大概为*.*.*的 该如何排序呢,默认排序的话 只会根据每位数进行排序,而我想根据.分隔符进行排序! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以使用instr,substr或者regexp_substr函数分解,然后再处理 1.1 1.2 1.10默认order的话会是 1.1 1.10 1.2 而我想要是1.1 1.2 1.10 分隔符'.'的个数是不一定的! scott@SZTYORA> select * from test;COL1----------------------------------------1.11.21.10-- 如果你的数据里每条记录只有一个句点的话,可以这样:已用时间: 00: 00: 00.00scott@SZTYORA> select col1, 2 substr(col1,1,instr(col1,'.',1,1)-1) as c1, 3 substr(col1,instr(col1,'.',1,1)+1) as c1 4 from test 5 order by lpad(substr(col1,1,instr(col1,'.',1,1)-1),4,0), 6 lpad(substr(col1,instr(col1,'.',1,1)+1),4,0);COL1 C1 C1---------------------------------------- -------------------- --------------------1.1 1 11.2 1 21.10 1 10已用时间: 00: 00: 00.01 -- 道理很简单:字符串排序:先左填充,再排序! -- (如果能够确保字符串是合法的数值,也可以直接将得到的每部分字符串用to_number()函数转换成数值,-- 再排序!方法很多,关键看自己肯不肯去动脑子啦!scott@SZTYORA> select col1, 2 substr(col1,1,instr(col1,'.',1,1)-1) as c1, 3 substr(col1,instr(col1,'.',1,1)+1) as c1, 4 lpad(substr(col1,1,instr(col1,'.',1,1)-1),4,0) cc1, 5 lpad(substr(col1,instr(col1,'.',1,1)+1),4,0) cc2 6 from test 7 order by lpad(substr(col1,1,instr(col1,'.',1,1)-1),4,0), 8 lpad(substr(col1,instr(col1,'.',1,1)+1),4,0);COL1 C1 C1 CC1 CC2---------------------------------------- -------------------- -------------------- -------------------- --------------------1.1 1 1 0001 00011.2 1 2 0001 00021.10 1 10 0001 0010已用时间: 00: 00: 00.01 呵呵 谢谢,现在大概有5级吧,但是需求还没完全确定,可惜小弟plsql水平一般,里面不光是数字,还穿插各种字符。。很是郁闷啊! ORACLE 变量赋值问题? 怎麼将一个用户下的表改为另一个用户 创建索引 请问怎么优化这条SQL语句啊,在线等待!!!!!!!! 编写PROC,表名动态给出,怎么动态构造select...into...语句 oracle9i 浏览器/服务器模式怎么实现? 关于orcale 9安装和配置ldap ora-00600 oracle致命错误。 导入数据库 的 问题 (急)!! ◇◆Oracle中高手看过来~~~~~`一个最最基本的问题!! linux下安装ORACLE字符集设置的问题 如何查看是否安装了Oracle label security模块
默认order的话会是 1.1 1.10 1.2 而我想要是1.1 1.2 1.10
分隔符'.'的个数是不一定的!
----------------------------------------
1.1
1.2
1.10-- 如果你的数据里每条记录只有一个句点的话,可以这样:已用时间: 00: 00: 00.00
scott@SZTYORA> select col1,
2 substr(col1,1,instr(col1,'.',1,1)-1) as c1,
3 substr(col1,instr(col1,'.',1,1)+1) as c1
4 from test
5 order by lpad(substr(col1,1,instr(col1,'.',1,1)-1),4,0),
6 lpad(substr(col1,instr(col1,'.',1,1)+1),4,0);COL1 C1 C1
---------------------------------------- -------------------- --------------------
1.1 1 1
1.2 1 2
1.10 1 10已用时间: 00: 00: 00.01
-- (如果能够确保字符串是合法的数值,也可以直接将得到的每部分字符串用to_number()函数转换成数值,
-- 再排序!方法很多,关键看自己肯不肯去动脑子啦!scott@SZTYORA> select col1,
2 substr(col1,1,instr(col1,'.',1,1)-1) as c1,
3 substr(col1,instr(col1,'.',1,1)+1) as c1,
4 lpad(substr(col1,1,instr(col1,'.',1,1)-1),4,0) cc1,
5 lpad(substr(col1,instr(col1,'.',1,1)+1),4,0) cc2
6 from test
7 order by lpad(substr(col1,1,instr(col1,'.',1,1)-1),4,0),
8 lpad(substr(col1,instr(col1,'.',1,1)+1),4,0);COL1 C1 C1 CC1 CC2
---------------------------------------- -------------------- -------------------- -------------------- --------------------
1.1 1 1 0001 0001
1.2 1 2 0001 0002
1.10 1 10 0001 0010已用时间: 00: 00: 00.01