2012-07-13 109 views
3

排序的字母数字数据我有一个像字母数字数据:在甲骨文

 
1 
1a 
1b 
2 
2b 
10 
10a 

如果我整理这些数据,输出将是这样的:

 
1 
1a 
10 
10a 
2 
2b 

但我想作为输出:

 
1 
1a 
2 
2b 
10 
10a 

如何使用Oracle命令获取此输出?

回答

9

所以,据我所知,你想按数据的数字部分排序。为了这个目的,你可以使用正则表达式(提取数字部分)如下:

SQL> select str from 
    2 (
    3 select '1' str from dual union all 
    4 select '1a' from dual union all 
    5 select '1b' from dual union all 
    6 select '2' from dual union all 
    7 select '2b' from dual union all 
    8 select '10' from dual union all 
    9 select '10a' from dual 
10 ) t 
11 order by to_number(regexp_substr(str, '^[[:digit:]]*')), str 
12/

STR 
--- 
1 
1a 
1b 
2 
2b 
10 
10a 
+0

非常感谢你............它的工作原理 – Nirdesh 2012-07-13 11:54:05

0

您也可以通过子句中为了分离数字和字母排列顺序做。检查下面的例子:

SELECT tt.qdef_grid 
     FROM qgdm_qdef tt 
     ORDER BY to_number(substr(tt.qdef_grid,2,2)), substr(tt.qdef_grid,1,1);