次のような列の値がありますA1,A20........A10.
。並べ替えを行うと、値は次のように表示されA1,A10, A2
ます...
しかし、この形式で列を表示したい
A1
A2
A10
A20 and so on..
誰かがこのソートをどのように達成するか教えてもらえますか?
次のような列の値がありますA1,A20........A10.
。並べ替えを行うと、値は次のように表示されA1,A10, A2
ます...
しかし、この形式で列を表示したい
A1
A2
A10
A20 and so on..
誰かがこのソートをどのように達成するか教えてもらえますか?
列のパターンが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