- PR -

初歩的なことですが、教えてください><;

投稿者投稿内容
すぎぼー
会議室デビュー日: 2006/01/10
投稿数: 7
投稿日時: 2006-01-10 17:07
こんにちは、はじめまして。
SQLの超初心者です。。

今作業しているテーブルに、会員番号(X:と電話番号(X:12)があるのですが、
電話番号に下記のような条件でマスクをかけたいのです。

条件:電話番号の数字部分を会員番号で順次置き換える。

例:会員番号 12345678
  電話番号 075−111−1111
   ↓
  マスク後 123−456−7812

こんなことSQLで出来ますでしょうか?
わかりにくい質問で申し訳ないですが、どなたかご教授頂けますでしょうか?
よろしくお願い致します。

すぎぼー
会議室デビュー日: 2006/01/10
投稿数: 7
投稿日時: 2006-01-10 17:08
すいません、一部変になってたので、もう一度。。。

今作業しているテーブルに、会員番号(X:8桁)と電話番号(X:12桁)があるのですが、
電話番号に下記のような条件でマスクをかけたいのです。

条件:電話番号の数字部分を会員番号で順次置き換える。

例:会員番号 12345678
  電話番号 075−111−1111
   ↓
  マスク後 123−456−7812

こんなことSQLで出来ますでしょうか?
わかりにくい質問で申し訳ないですが、どなたかご教授頂けますでしょうか?
よろしくお願い致します。

Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2006-01-10 17:18
できますよ。
ただしストアドファンクション作る必要がありますが。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2006-01-10 17:21
update文で、DBに応じた文字列関数を使えばできますよ

すぎぼー
会議室デビュー日: 2006/01/10
投稿数: 7
投稿日時: 2006-01-10 17:39
Anthyhime様、明智重蔵様、回答ありがとうございます。
やっぱり出来るんですね。。

今、チラッと思いついたのですが、

まず、電話番号12桁のうち、空白を除いた桁数をカウントし、
その桁数の回数、一桁ずつ抜き出して下記ループでまわす。

その一桁は"-"かどうかのIF文。
 "-"なら、何もしない。

 それ以外なら、会員番号の一桁目をとってきておきかえ。
 置き換えた場合は変数を++

以下、上記変数の桁の会員番号1桁をとってくる。

こんな感じになるんでしょうか??

 








Ypoons
会議室デビュー日: 2006/01/10
投稿数: 2
投稿日時: 2006-01-10 17:58
> 例:会員番号 12345678
>   電話番号 075−111−1111
>    ↓
>   マスク後 123−456−7812
>


単純な文字列操作の組合せで、更新すると実現できるとと思います


会員番号(8桁)  (仮定)一番少ない桁数の人は、5桁

select 会員番号+会員番号+会員番号 from テーブル

結果 123456781234567812345678 ・・・ 必ず、15桁の文字列が得られます
    

select substring(会員番号+会員番号+会員番号,1,3) from テーブル
select substring(会員番号+会員番号+会員番号,4,3) from テーブル
select substring(会員番号+会員番号+会員番号,7,4) from テーブル

結果 123
結果 456
結果 7812



アップデート文に、ハイフンと結合した文字列を作成

update テーブル set 電話番号 = '123' + '-' + '456' + '-' + '7812'

※実際には、上記のsubstringを設定
すぎぼー
会議室デビュー日: 2006/01/10
投稿数: 7
投稿日時: 2006-01-10 18:06
Ypoons様、ありがとうございます!

確かにこのほうが、簡単ですね^^

でも、−が入る位置が決まっていなくて

○○○−○○○−○○○○
もあれば、
○○−○○○○−○○○○
もあり、
○○○○−○○○−○○○
の場合もあるため、どうしても−の位置は文字列操作だけでは不可能だと思うのですが。。。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-01-10 20:54
OracleならInstr、Sql ServerならCharIndexといった指定文字列の出現位置を取得する関数がありますので、それで"-"の位置を検索してSUBSTRと組み合わせれば一応文字列操作でできます。
汚いですけど、Oracleの例です(10gで動作確認)

コード:
SELECT 
SUBSTR(会員番号 || 会員番号,1,INSTR(電話番号,'-',1)-1) || '-' || 
SUBSTR(会員番号 || 会員番号,INSTR(電話番号,'-',1),
    INSTR(電話番号,'-',1,2)-INSTR(電話番号,'-',1))  || '-' || 
SUBSTR(会員番号 || 会員番号,INSTR(電話番号,'-',1,2),
    LENGTH(電話番号)-INSTR(電話番号,'-',1,2))
FROM *****


うん、美しくない。
"-"の出現回数が2回でなければならないって縛りもあるので、
ストアド使った方が良いでしょうね。

#一応Caseとか使えばできはしますが、保守を考えるとあんまりお奨めできません。

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