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

7-62 最初のアルファベットの位置を取得

SQLパズル

テーブル
Val
---------
123456789
12345678a
12345ab89
a2345b78c

最初のアルファベットが何文字目か取得する。

出力結果
Val        Pos
---------  ---
123456789    0
12345678a    9
12345ab89    6
a2345b78c    1


SQL

--■■■正規表現を使う方法(10g以降)■■■
select Val,RegExp_Instr(Val,'[a-zA-Z]') as Pos
  from (select '123456789' as Val from dual
  union select '12345678a' from dual
  union select '12345ab89' from dual
  union select 'a2345b78c' from dual);

--■■■正規表現を使わない方法■■■
select Val,
nvl(instr(val,
substr(translate(Val,'a' ||
                 translate(Val,'0abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ','0'),'a')
  ,1,1)),0) as Pos
  from (select '123456789' as Val from dual
  union select '12345678a' from dual
  union select '12345ab89' from dual
  union select 'a2345b78c' from dual);


解説

正規表現を使わない方法では、
アルファベット以外を消去した文字列の一文字目の文字を、
instr関数の引数にしてます。