在Oracle中对字母数字数据进行排序

时间:2012-07-13 10:56:35

标签: sql oracle

我有一个字母数字数据,如:

1
1a
1b
2
2b
10
10a

如果我对这些数据进行排序,输出将如下:

1
1a
10
10a
2
2b

但我希望输出为:

1
1a
2
2b
10
10a

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);