在我的数据库字段里面有一个 serial 的字段
我写的语句是 select * from pro_task t order by t.tasserial
排序出来的结果是
id serial
1 1
2 1.1
13 1.1.1
11 1.10
12 1.11
4 1.2
3 1.3
5 1.4
6 1.5
7 1.6
8 1.7
9 1.8
10 1.9
我想把1.10,1.11排到1.9 后面,可是怎么也排不到,希望各位大侠帮忙亚
我写的语句是 select * from pro_task t order by t.tasserial
排序出来的结果是
id serial
1 1
2 1.1
13 1.1.1
11 1.10
12 1.11
4 1.2
3 1.3
5 1.4
6 1.5
7 1.6
8 1.7
9 1.8
10 1.9
我想把1.10,1.11排到1.9 后面,可是怎么也排不到,希望各位大侠帮忙亚
解决方案 »
- 我想上路,求教了。
- select a.* from smtopm a INNER JOIN iir b on a.item_key!=b.itm_key上面这句话有什么好的方法使执行时间更短,还有为什么这句话会产生
- 怎么样确定身份证15位18位是相同的人
- 以现在建表蓝本 批量建立月表
- 急救!导入数据前的配置问题
- 我该怎么样去选择啊?????
- OracleManagementServer启动问题
- SQL语句,ADO,表内数据匹配语句,内存访问0?
- 怎样写一个触发器????
- Oracle+PHP 按照这样方式搭建【游戏管理平台】的【数据库】如何优化?
- 奇怪的 通信通道的文件结束的错误 ?
- 如何取得当前时间前10个小时的值,这样的SQL文怎样写
2 as
3 str varchar2(500);
4 i number;
5 str_rtn varchar2(600);
6 str_temp varchar2(50);
7 begin
8 str:=vstr||'.';
9 while instr(str,'.')>0 loop
10 str_rtn:=str_rtn||lpad(substr(str,1,instr(str,'.')-1),3,'0');
11 str:=substr(str,instr(str,'.')+1);
12 end loop;
13 return str_rtn||str;
14 end f_mod;
15 /函数已创建。已用时间: 00: 00: 00.31
SQL> select f_mod('1.23.4.5.678.9') from dual;F_MOD('1.23.4.5.678.9')
-----------------------------------------------------------------------------
001023004005678009已用时间: 00: 00: 00.30SQL> select * from tbtemp; ID SERIAL
---------- ------------------------------
1 1
1 1.1
1 1.1.1
1 2.1.1
1 3
1 1.9已选择6行。已用时间: 00: 00: 00.60
SQL> select * from tbtemp order by f_mod(serial); ID SERIAL
---------- ------------------------------
1 1
1 1.1
1 1.1.1
1 1.9
1 2.1.1
1 3已选择6行。
to_number(substr(t.tasserial,instr(t.tasserial,'.'),instr(t.tasserial,'.',1,2)-1)),
to_number(substr(t.tasserial,instr(t.tasserial,'.',1,2),instr(t.tasserial,'.',1,3)-1))-------原理:先按第一个'.'前的数字排序,再按第一个'.'和第二个'.'之间的数字排序,以次类推。语句没有测试,原理就这样。不知道能不能满足楼主的需求。当然性能肯定好不了。
order by to_number(substr(serial, 3))