トップページに戻る
次の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であることをふまえてます