0

次のような列の値がありますA1,A20........A10.。並べ替えを行うと、値は次のように表示されA1,A10, A2ます...

しかし、この形式で列を表示したい

A1
A2
A10
A20 and so on..

誰かがこのソートをどのように達成するか教えてもらえますか?

4

2 に答える 2

0

列のパターンがAZ+いくつかの数字だけの場合は、次のように並べ替えることができます。

select id
  from your_table
 order by regexp_replace(id, '[0-9]', ''), 
          to_number(regexp_replace(upper(id), '[A-Z]', ''));

regexp_replace(id, '[0-9]', ''),

上記は「A」を最初に保持し、次に「B」などを保持します。これを実行したくない場合は、削除できます。

ただし、いずれかの行に他の数字以外の文字が含まれている場合、無効な数値でクエリが失敗します。

例えば:

SQL> select * from tester order by id;

ID
-----
A1
A10
A2
A3
A4
A5
A6
A7
A8
A9
B1
B10
B2
B3
B4
B5
B6
B7
B8
B9

20 rows selected.

SQL> select id from tester order by regexp_replace(id, '[0-9]', ''), to_number(regexp_replace(upper(id), '[A-Z]', ''));

ID
-----
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
B1
B2
B3
B4
B5
B6
B7
B8
B9
B10
于 2013-01-28T16:21:47.257 に答える