当前位置: 代码迷 >> Oracle技术 >> 请问个sql,排序的有关问题
  详细解决方案

请问个sql,排序的有关问题

热度:29   发布时间:2016-04-24 08:32:20.0
请教个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   字段:col1select 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_nofrom test1order by regexp_substr(col1,'[[:digit:]]+')          col1         c_no---------------------------1    读者文摘第02期    022    读者文摘第03期    033    读者文摘第05期    054    读者文摘第06期    065    读者文摘第10期    106    读者文摘第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_nofrom test1order by to_number(regexp_substr(col1,'[[:digit:]]+'),'99999')          col1         c_no---------------------------1    读者文摘第2期     22    读者文摘第3期     33    读者文摘第5期     54    读者文摘第6期     65    读者文摘第10期    106    读者文摘第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期)');
  相关解决方案