次のような英数字データがあります。
1 1a 1b 2 2b 10 10a
このデータを並べ替えると、出力は次のようになります。
1 1a 10 10a 2 2b
しかし、私は次のように出力したい:
1 1a 2 2b 10 10a
Oracleコマンドでこの出力を取得するには?
したがって、私が理解しているように、データの数値部分で並べ替えたいと考えています。この目的のために、次のように(数値部分を抽出するために)正規表現を使用できます。
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
order by 句で数字と英数字の並べ替え順序を分離することによっても、同じことができます。以下の例を確認してください。
SELECT tt.qdef_grid
FROM qgdm_qdef tt
ORDER BY to_number(substr(tt.qdef_grid,2,2)), substr(tt.qdef_grid,1,1);