首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

问一个排序语句,该如何处理

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

问一个排序语句
字段类型为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


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 created

SQL> insert into testa(f) values( '文件〔2006〕2号 ');

1 row inserted

SQL> insert into testa(f) values( '文件〔2006〕12号 ');

1 row inserted

SQL> insert into testa(f) values( '文件头〔2006〕14号 ');

1 row inserted

SQL> insert into testa(f) values( '党委文件〔2009〕32号 ');

1 row inserted

SQL> insert into testa(f) values( '公司办文件〔2008〕4号 ');

1 row inserted

SQL> 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>

热点排行