- PR -

oracle9iで電話番号のフォーマットチェック

1
投稿者投稿内容
maurois
会議室デビュー日: 2004/03/06
投稿数: 13
投稿日時: 2006-10-01 01:06
oracle9iで電話番号のフォーマットチェック(999-999-xxxxになっているか)
を行う関数をpl/sqlで作成したいのですが、簡単に作成できる方法はあるのでしょうか。
oracle10gは正規表現が使用できるので簡単に作成できるのですが。
温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2006-10-02 01:13
引用:

mauroisさんの書き込み (2006-10-01 01:06) より:
oracle9iで電話番号のフォーマットチェック(999-999-xxxxになっているか)
を行う関数をpl/sqlで作成したいのですが、簡単に作成できる方法はあるのでしょうか。
oracle10gは正規表現が使用できるので簡単に作成できるのですが。



こんばんは。
下記のようなクエリをPL/SQLに仕込めば実現できませんか?
「簡単に作成...」=「2行ぐらいのクエリ」
を意味しているとNGでしょうけど。

コード:

with
 mydual as (
  select
   '123-456-7890' as target,  -- ここに引数を渡してください
   '000-000-0000' as format   -- ここに引数を渡してください
  from
   dual
 )
select
 case when 
  length( mydual.target ) = length( mydual.format ) and
  translate( mydual.target, '0123456789', '0000000000') = mydual.format
 then
  'OK' 
 else
  'NG'
 end
from
 mydual;



ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-02 07:14
length( mydual.target ) = length( mydual.format )
は不要

なぜなら
translate( mydual.target, '0123456789', '0000000000') = mydual.format
がtrueなら
length( mydual.target ) = length( mydual.format )
もtrueだから

[ メッセージ編集済み 編集者: ぷさいくろう 編集日時 2006-10-02 07:24 ]
温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2006-10-03 02:49
引用:

ぷさいくろうさんの書き込み (2006-10-02 07:14) より:
length( mydual.target ) = length( mydual.format )
は不要

なぜなら
translate( mydual.target, '0123456789', '0000000000') = mydual.format
がtrueなら
length( mydual.target ) = length( mydual.format )
もtrueだから




ぷさいくろう様
ご指摘のとおりです。フォロー感謝します。
ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-03 06:00
mydual.targetの最後に大量の半角空白がある場合もあるけど、
translateの戻り値の型はVrachar2だから空白埋め比較がおきないんよ


[ メッセージ編集済み 編集者: ぷさいくろう 編集日時 2006-10-09 14:22 ]
1

スキルアップ/キャリアアップ(JOB@IT)