我有一个字母数字数据,如:
1 1a 1b 2 2b 10 10a
如果我对这些数据进行排序,输出将如下:
1 1a 10 10a 2 2b
但我希望输出为:
1 1a 2 2b 10 10a
如何使用Oracle命令获取此输出?
答案 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);