トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-73 文字列を分割してソート

SQLパズル

SortTestテーブル
Val
----
A1
A2
A3
A9
A10
A101
B1
B3
B100
C50

英大文字と数値が、連結した形式になっているValを、
英大文字の昇順、数値の昇順
で出力する。

出力結果
Val
----
A1
A2
A3
A9
A10
A101
B1
B3
B100
C50


データ作成スクリプト

create table SortTest as
select 'A1' as Val from dual
union select 'A2'   from dual
union select 'A3'   from dual
union select 'A9'   from dual
union select 'A10'  from dual
union select 'A101' from dual
union select 'B1'   from dual
union select 'B3'   from dual
union select 'B100' from dual
union select 'C50'  from dual;


SQL

--■■■正規表現を使わない方法■■■
select Val
  from SortTest
order by Rtrim(Val,'0123456789'),to_number(Ltrim(Val,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'));

--■■■正規表現を使う方法(10g以降)■■■
select Val
  from SortTest
order by RegExp_Replace(Val,'[0-9]+$'),to_number(RegExp_Replace(Val,'^[A-Z]+'));


解説

正規表現で、RTrim関数とLTrim関数を模倣することができます。