日期:2014-05-17  浏览次数:20943 次

问一个排序语句
字段类型为VARCHAR2,数据为
文件〔2006〕13号
文件〔2006〕14号
文件〔2006〕10号
文件〔2006〕11号
想排序后为
文件〔2006〕10号
文件〔2006〕11号
文件〔2006〕13号
文件〔2006〕14号

------解决方案--------------------
create table t2 (cid varchar2(100),cName varchar2(100))

insert into t2 values( '文件〔2006〕 ', '13号 ');
insert into t2 values( '文件〔2006〕 ', '14号 ');
insert into t2 values( '文件〔2006〕 ', '10号 ');
insert into t2 values( '文件〔2006〕 ', '11号 ');

select * from t2 order by cname


1 文件〔2006〕 10号
2 文件〔2006〕 11号
3 文件〔2006〕 13号
4 文件〔2006〕 14号
------解决方案--------------------
create table t2 (cid varchar2(100),cName varchar2(100))

insert into t2 values( '文件〔2006〕 ', '13号 ');
insert into t2 values( '文件〔2006〕 ', '14号 ');
insert into t2 values( '文件〔2006〕 ', '10号 ');
insert into t2 values( '文件〔2006〕 ', '11号 ');
insert into t2 values( '文件〔2007〕 ', '11号 ');
insert into t2 values( '文件〔2007〕 ', '12号 ');

select * from t2 group by cid,cname order by cid,cname


1 文件〔2006〕 10号
2 文件〔2006〕 11号
3 文件〔2006〕 13号
4 文件〔2006〕 14号
5 文件〔2007〕 11号
6 文件〔2007〕 12号
------解决方案--------------------
select * from table
group by substr(f1,instr(f1, '( ')+1,4),substr(f1,instr(f1, ')+2)

可能速度慢,可以做函數索引
------解决方案--------------------
看不出哪里不行,你实在不行自己加一列,自己写上排序用的数字,然后order by那烈完了
------解决方案--------------------
估计你要的应该是这个语句吧
select test.title,test.id,to_number(substr(title,1,length(title)-2)) d from test order by d;
------解决方案--------------------
select title,to_number(substr(title,4,4)||lpad(substr(title,9,length(title)-9),9, '0 ')) num from table_name order by num;
------解决方案--------------------
SQL> desc test
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

TITLE VARCHAR2(32)

SQL> select * from test;

TITLE
--------------------------------
文件〔2006〕13号
文件〔2006〕15号
文件〔2006〕1001号
文件〔2006〕2号
文件〔2006〕134号
文件〔2007〕99号
文件〔2007〕18号
文件〔2007〕1号

已选择8行。

SQL> select title,to_number(substr(title,4,4)||lpad(substr(title,9,length(title)
-9),9, '0 ')) num from test order by num;

TITLE NUM
-------------------------------- ----------
文件〔2006〕2号 2.0060E+12
文件〔2006〕13号 2.0060E+12
文件〔2006〕15号 2.0060E+12
文件〔2006〕134号 2.0060E+12
文件〔2006〕1001号 2.0060E+12
文件〔2007〕1号 2.0070E+12
文件〔2007〕18号 2.0070E+12
文件〔2007〕99号 2.0070E+12

已选择8行。
------解决方案--------------------
SQL> desc test;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

ID NUMBER(10)
CHAKANQX CLOB