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

7-59 ハイフンの前の数字を取得

SQLパズル

テーブル
ColX
-------
B19-18
BC14-01
IC9-02
P9-02

ハイフンの前の数字を取得する。

出力結果
ColX     NU
-------  --
B19-18   19
BC14-01  14
IC9-02   9
P9-02    9


SQL

col NU for a4

--■■■正規表現を使わない方法■■■
select ColX,substr(NU,1,instr(NU,'-')-1) as NU
from (select ColX,
translate(ColX,'0' || translate(ColX,'a-0123456789','a'),'0') as NU
from (select 'B19-18' as ColX from dual
union select 'BC14-01' from dual
union select 'IC9-02'  from dual
union select 'P9-02'   from dual));

--■■■正規表現を使う方法(10g以降)■■■
select ColX,RegExp_Replace(ColX,'^[^0-9]*([0-9]*)\-.*$','\1') as NU
from (select 'B19-18' as ColX from dual
union select 'BC14-01' from dual
union select 'IC9-02'  from dual
union select 'P9-02'   from dual);


解説

正規表現を使わない方法では、
translate関数で、数字とハイフン以外を消去した文字列を作成してます。