数据库需要按照标题的时间,或者期数来排序比如:“读者文摘第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期)');