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

3-26 文字クラスをtranslate関数で代用

SQLパズル

テーブル
電話番号
--------------
123-4567-8901
123-4567-8901
12345678901
1-2-3-45678901

電話番号が正規表現の
^[0-9]{3}-[0-9]{4}-[0-9]{4}$
にマッチするかチェックする

出力結果
電話番号        チェック結果
--------------  ------------
123-4567-8901              1
123-4567-8901              0
12345678901                0
1-2-3-45678901             0


SQL

--■■■translate関数を使う方法■■■
select 電話番号,
case when translate(電話番号,'0123456789','0000000000') = '000-0000-0000'
     then 1 else 0 end as チェック結果
  from (select '123-4567-8901' as 電話番号 from dual
union all select '123-4567-8901   ' from dual
union all select '12345678901' from dual
union all select '1-2-3-45678901' from dual);

--■■■正規表現を使う方法(10g以降)■■■
select 電話番号,
case when RegExp_Like(電話番号,'^[0-9]{3}-[0-9]{4}-[0-9]{4}$')
     then 1 else 0 end as チェック結果
  from (select '123-4567-8901' as 電話番号 from dual
union all select '123-4567-8901   ' from dual
union all select '12345678901' from dual
union all select '1-2-3-45678901' from dual);


解説

Translate関数の戻り値のデータ型が
Varchar2であることをふまえてます