SQL> desc test; 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- ID NUMBER(10) CHAKANQX CLOB FAWENRQ DATE FAWENBH VARCHAR2(50) MIMIDJ VARCHAR2(50) FAWANGDW VARCHAR2(50) WENJIANBT VARCHAR2(200) FENSHUH VARCHAR2(50) HEGAO VARCHAR2(50) HUIGAO VARCHAR2(50) NIGAOREN VARCHAR2(50) NIGAORENBM VARCHAR2(150) QIFAREN VARCHAR2(50) GUIDANGJH VARCHAR2(50) CONTENT CLOB HONGTOU NUMBER(10)SQL> select id,fawenbh from test; ID FAWENBH ---------- -------------------------------------------------- 1 文件〔2006〕13号 2 文件〔2006〕15号 3 文件〔2006〕1001号 4 文件〔2006〕2号 5 文件〔2006〕134号 6 文件〔2007〕99号 7 文件〔2007〕18号 8 文件〔2007〕1号已选择8行。SQL> select id,fawenbh,to_number(substr(fawenbh,4,4)||lpad(substr(fawenbh,9,leng th(fawenbh)-9),9,'0')) num from test order by num; ID FAWENBH NUM ---------- -------------------------------------------------- ---------- 4 文件〔2006〕2号 2.0060E+12 1 文件〔2006〕13号 2.0060E+12 2 文件〔2006〕15号 2.0060E+12 5 文件〔2006〕134号 2.0060E+12 3 文件〔2006〕1001号 2.0060E+12 8 文件〔2007〕1号 2.0070E+12 7 文件〔2007〕18号 2.0070E+12 6 文件〔2007〕99号 2.0070E+12已选择8行。
SQL> create table testa(f varchar2(100));Table createdSQL> insert into testa(f) values('文件〔2006〕2号');1 row insertedSQL> insert into testa(f) values('文件〔2006〕12号');1 row insertedSQL> insert into testa(f) values('文件头〔2006〕14号');1 row insertedSQL> insert into testa(f) values('党委文件〔2009〕32号');1 row insertedSQL> insert into testa(f) values('公司办文件〔2008〕4号');1 row insertedSQL> select * from testa;F -------------------------------------------------------------------------------- 文件〔2006〕2号 文件〔2006〕12号 文件头〔2006〕14号 党委文件〔2009〕32号 公司办文件〔2008〕4号SQL> select * from testa order by to_number(substr(f,instr(f,'〕')+length('〕'),instr(substr(f,instr(f,'〕')+length('〕')),'号')-1));F -------------------------------------------------------------------------------- 文件〔2006〕2号 公司办文件〔2008〕4号 文件〔2006〕12号 文件头〔2006〕14号 党委文件〔2009〕32号SQL>
sorry,没看清楚,最后的 语句应该是:SQL> select * from testa order by to_number(substr(f,instr(f,'〔')+length('〔'),instr(substr(f,instr(f,'〔')+length('〔')),'〕')-1)),to_number(substr(f,instr(f,'〕')+length('〕'),instr(substr(f,instr(f,'〕')+length('〕')),'号')-1));F -------------------------------------------------------------------------------- 文件〔2006〕2号 文件〔2006〕12号 文件头〔2006〕14号 公司办文件〔2008〕4号 党委文件〔2009〕32号SQL>
感谢大家的回答,问题已解决~~~~~~~~~ 使用了precipitant(塞北的雪)的,select * from testa order by to_number(substr(f,instr(f,'〔')+length('〔'),instr(substr(f,instr(f,'〔')+length('〔')),'〕')-1)),to_number(substr(f,instr(f,'〕')+length('〕'),instr(substr(f,instr(f,'〕')+length('〕')),'号')-1));
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号
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号
group by substr(f1,instr(f1,'(')+1,4),substr(f1,instr(f1,')+2)可能速度慢,可以做函數索引
select test.title,test.id,to_number(substr(title,1,length(title)-2)) d from test order by d;
给一个字符型字段排序,按字段值中有规律的数字排序,不能新加字段
表结构已经说的很清楚了,需要排序的字段是个字符型,
字段类型为VARCHAR2,数据为
文件〔2006〕13号
文件〔2006〕14号
文件〔2006〕10号
文件〔2006〕11号
名称 是否为空? 类型
----------------------------------------- -------- ---------------------------- 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行。
CHAKANQX CLOB
FAWENRQ DATE
FAWENBH VARCHAR2(50) 是对此字段排序的
MIMIDJ VARCHAR2(50)
FAWANGDW VARCHAR2(50)
WENJIANBT VARCHAR2(200)
FENSHUH VARCHAR2(50)
HEGAO VARCHAR2(50)
HUIGAO VARCHAR2(50)
NIGAOREN VARCHAR2(50)
NIGAORENBM VARCHAR2(150)
QIFAREN VARCHAR2(50)
GUIDANGJH VARCHAR2(50)
CONTENT CLOB
HONGTOU NUMBER(10)
名称 是否为空? 类型
----------------------------------------- -------- ---------------------------- ID NUMBER(10)
CHAKANQX CLOB
FAWENRQ DATE
FAWENBH VARCHAR2(50)
MIMIDJ VARCHAR2(50)
FAWANGDW VARCHAR2(50)
WENJIANBT VARCHAR2(200)
FENSHUH VARCHAR2(50)
HEGAO VARCHAR2(50)
HUIGAO VARCHAR2(50)
NIGAOREN VARCHAR2(50)
NIGAORENBM VARCHAR2(150)
QIFAREN VARCHAR2(50)
GUIDANGJH VARCHAR2(50)
CONTENT CLOB
HONGTOU NUMBER(10)SQL> select id,fawenbh from test; ID FAWENBH
---------- --------------------------------------------------
1 文件〔2006〕13号
2 文件〔2006〕15号
3 文件〔2006〕1001号
4 文件〔2006〕2号
5 文件〔2006〕134号
6 文件〔2007〕99号
7 文件〔2007〕18号
8 文件〔2007〕1号已选择8行。SQL> select id,fawenbh,to_number(substr(fawenbh,4,4)||lpad(substr(fawenbh,9,leng
th(fawenbh)-9),9,'0')) num from test order by num; ID FAWENBH NUM
---------- -------------------------------------------------- ----------
4 文件〔2006〕2号 2.0060E+12
1 文件〔2006〕13号 2.0060E+12
2 文件〔2006〕15号 2.0060E+12
5 文件〔2006〕134号 2.0060E+12
3 文件〔2006〕1001号 2.0060E+12
8 文件〔2007〕1号 2.0070E+12
7 文件〔2007〕18号 2.0070E+12
6 文件〔2007〕99号 2.0070E+12已选择8行。
--------------------------------------------------------------------------------
文件〔2006〕2号
文件〔2006〕12号
文件头〔2006〕14号
党委文件〔2009〕32号
公司办文件〔2008〕4号SQL> select * from testa order by to_number(substr(f,instr(f,'〕')+length('〕'),instr(substr(f,instr(f,'〕')+length('〕')),'号')-1));F
--------------------------------------------------------------------------------
文件〔2006〕2号
公司办文件〔2008〕4号
文件〔2006〕12号
文件头〔2006〕14号
党委文件〔2009〕32号SQL>
--------------------------------------------------------------------------------
文件〔2006〕2号
文件〔2006〕12号
文件头〔2006〕14号
公司办文件〔2008〕4号
党委文件〔2009〕32号SQL>
使用了precipitant(塞北的雪)的,select * from testa order by to_number(substr(f,instr(f,'〔')+length('〔'),instr(substr(f,instr(f,'〔')+length('〔')),'〕')-1)),to_number(substr(f,instr(f,'〕')+length('〕'),instr(substr(f,instr(f,'〕')+length('〕')),'号')-1));