请教个sql,排序的问题

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

ps:直接按照标题升序或者倒序会出现第1期和第10期在一起,排在第二期的后面。
...全文
180 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
我心飞翔 2012-03-15
  • 打赏
  • 举报
回复
实测数据:

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期)');


实测结果:
  • 打赏
  • 举报
回复

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


  • 打赏
  • 举报
回复

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


  • 打赏
  • 举报
回复

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


dd121011 2012-03-14
  • 打赏
  • 举报
回复
函数应该是length,改成length后不报这个错了,但是报:“invalid number”
dd121011 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
select * from tb order by to_number(replace(substr(标题 , instr(标题,'第') + 1 , len(标题)) , '期','')) desc
[/Quote]
老大。提示“len”附近有错误。 “"len" invalid statement”
dawugui 2012-03-14
  • 打赏
  • 举报
回复
select * from tb order by to_number(replace(substr(标题 , instr(标题,'第') + 1 , len(标题)) , '期','')) desc
dd121011 2012-03-14
  • 打赏
  • 举报
回复
直接按照标题的排序是这样的:
xxxx周报(第9期)
xxxx周报(第7期)
xxxx周报(第5期)
xxxx周报(第3期)
xxxx周报(第2期)
xxxx周报(第20期)
xxxx周报(第1期)

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧