日期:2014-05-16  浏览次数:20720 次

请教个sql,排序的问题
数据库需要按照标题的时间,或者期数来排序比如:“读者文摘第1期”、“读者文摘第2期”、“读者文摘第3期”,可以不可以直接根据标题来排序,让她做到按期数的倒序排序?
注:标题格式是定死的。aa第x期。

ps:直接按照标题升序或者倒序会出现第1期和第10期在一起,排在第二期的后面。

------解决方案--------------------
select * from tb order by to_number(replace(substr(标题 , instr(标题,'第') + 1 , len(标题)) , '期','')) desc
------解决方案--------------------
SQL code

--表名:tb1   字段:col1
select col1, regexp_substr(col1,'[[:digit:]]+')
from tb1   
order by regexp_substr(col1,'[[:digit:]]+')

------解决方案--------------------
SQL code

create table test1(col1  nvarchar2(50));
insert into test1 values('读者文摘第05期');
insert into test1 values('读者文摘第03期'); 
insert into test1 values('读者文摘第06期');
insert into test1 values('读者文摘第10期');
insert into test1 values('读者文摘第11期');
insert into test1 values('读者文摘第02期');

select col1, regexp_substr(col1,'[[:digit:]]+') c_no
from test1
order by regexp_substr(col1,'[[:digit:]]+')

          col1         c_no
---------------------------
1    读者文摘第02期    02
2    读者文摘第03期    03
3    读者文摘第05期    05
4    读者文摘第06期    06
5    读者文摘第10期    10
6    读者文摘第11期    11

------解决方案--------------------
SQL code

create table test1(col1  nvarchar2(50));
insert into test1 values('读者文摘第5期');
insert into test1 values('读者文摘第3期'); 
insert into test1 values('读者文摘第6期');
insert into test1 values('读者文摘第10期');
insert into test1 values('读者文摘第11期');
insert into test1 values('读者文摘第2期');

select col1, regexp_substr(col1,'[[:digit:]]+') c_no
from test1
order by to_number(regexp_substr(col1,'[[:digit:]]+'),'99999')

          col1         c_no
---------------------------
1    读者文摘第2期     2
2    读者文摘第3期     3
3    读者文摘第5期     5
4    读者文摘第6期     6
5    读者文摘第10期    10
6    读者文摘第11期    11

------解决方案--------------------
实测数据:
SQL code

CREATE TABLE T159
(
    F1 VARCHAR2(20)
);

INSERT INTO T159 VALUES('xxxx周报(第9期)');
INSERT INTO T159 VALUES('xxxx周报(第3期)');
INSERT INTO T159 VALUES('xxxx周报(第2期)');
INSERT INTO T159 VALUES('xxxx周报(第10期)');
INSERT INTO T159 VALUES('xxxx周报(第5期)');
INSERT INTO T159 VALUES('xxxx周报(第7期)');
INSERT INTO T159 VALUES('xxxx周报(第1期)');
INSERT INTO T159 VALUES('xxxx周报(第20期)');