日期:2014-05-16 浏览次数:21188 次
select * from data order by regexp_substr(book_no,'[A-Z]+'),regexp_substr(book_no,'[0-9]+')
------解决方案--------------------
select *
from data
order by regexp_substr(book_no,'[A-Z]+'),regexp_substr(book_no,'[0-9]+')
,to_number(substr(book_no,instr(book_no,']')+1,instr(book_no,'号')-instr(book_no,']')-1))
------解决方案--------------------
book_no
--------------------------------
1 AAAAAAA[2007]2号
2 AAAAAAA[2007]121号
3 AAAAAAA[2007]122号
4 AAAAAAA[2008]33号
5 BBBB[2007]111号
6 BBBB[2007]112号
7 BBBB[2008]3号
8 BBBB[2008]56号
9 CCC[2007]22号
10 CCC[2007]56号
11 CCC[2007]111号
12 CCC[2007]112号
------解决方案--------------------
with t as (
select 'CCC[2007]111号' as book_no from dual union all
select 'CCC[2007]112号' as book_no from dual union all
select 'CCC[2007]22号' as book_no from dual union all
select 'CCC[2007]56号' as book_no from dual union all
select 'AAAAAAA[2007]121号' as book_no from dual union all
select 'AAAAAAA[2007]122号' as book_no from dual union all
select 'AAAAAAA[2007]2号' as book_no from dual union all
select 'AAAAAAA[2008]33号' as book_no from dual union all
select 'BBBB[2007]111号' as book_no from dual union all
select 'BBBB[2007]112号' as book_no from dual union all
select 'BBBB[2008]3号' as book_no from dual union all
select 'BBBB[2008]56号' as book_no from dual
)
select book_no, substr(book_no,1,instr(book_no,'[')-1) head,regexp_substr(book_no,'[[:digit:]]+',1,1) yy,
regexp_substr(book_no,'[[:digit:]]+',1,2) ed from t
order by head asc,yy desc,ed asc