3

次のような英数字データがあります。

1
1a
1b
2
2b
10
10a

このデータを並べ替えると、出力は次のようになります。

1
1a
10
10a
2
2b

しかし、私は次のように出力したい:

1
1a
2
2b
10
10a

Oracleコマンドでこの出力を取得するには?

4

2 に答える 2

10

したがって、私が理解しているように、データの数値部分で並べ替えたいと考えています。この目的のために、次のように(数値部分を抽出するために)正規表現を使用できます。

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
于 2012-07-13T11:08:07.800 に答える
0

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);
于 2016-08-19T11:01:46.927 に答える