- - PR -
初歩的なことですが、教えてください><;
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-10 17:07
こんにちは、はじめまして。
SQLの超初心者です。。 今作業しているテーブルに、会員番号(X:と電話番号(X:12)があるのですが、 電話番号に下記のような条件でマスクをかけたいのです。 条件:電話番号の数字部分を会員番号で順次置き換える。 例:会員番号 12345678 電話番号 075−111−1111 ↓ マスク後 123−456−7812 こんなことSQLで出来ますでしょうか? わかりにくい質問で申し訳ないですが、どなたかご教授頂けますでしょうか? よろしくお願い致します。 | ||||
|
投稿日時: 2006-01-10 17:08
すいません、一部変になってたので、もう一度。。。
今作業しているテーブルに、会員番号(X:8桁)と電話番号(X:12桁)があるのですが、 電話番号に下記のような条件でマスクをかけたいのです。 条件:電話番号の数字部分を会員番号で順次置き換える。 例:会員番号 12345678 電話番号 075−111−1111 ↓ マスク後 123−456−7812 こんなことSQLで出来ますでしょうか? わかりにくい質問で申し訳ないですが、どなたかご教授頂けますでしょうか? よろしくお願い致します。 | ||||
|
投稿日時: 2006-01-10 17:18
できますよ。
ただしストアドファンクション作る必要がありますが。 | ||||
|
投稿日時: 2006-01-10 17:21
update文で、DBに応じた文字列関数を使えばできますよ
| ||||
|
投稿日時: 2006-01-10 17:39
Anthyhime様、明智重蔵様、回答ありがとうございます。
やっぱり出来るんですね。。 今、チラッと思いついたのですが、 まず、電話番号12桁のうち、空白を除いた桁数をカウントし、 その桁数の回数、一桁ずつ抜き出して下記ループでまわす。 その一桁は"-"かどうかのIF文。 "-"なら、何もしない。 それ以外なら、会員番号の一桁目をとってきておきかえ。 置き換えた場合は変数を++ 以下、上記変数の桁の会員番号1桁をとってくる。 こんな感じになるんでしょうか?? | ||||
|
投稿日時: 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 18:06
Ypoons様、ありがとうございます!
確かにこのほうが、簡単ですね^^ でも、−が入る位置が決まっていなくて ○○○−○○○−○○○○ もあれば、 ○○−○○○○−○○○○ もあり、 ○○○○−○○○−○○○ の場合もあるため、どうしても−の位置は文字列操作だけでは不可能だと思うのですが。。。 | ||||
|
投稿日時: 2006-01-10 20:54
OracleならInstr、Sql ServerならCharIndexといった指定文字列の出現位置を取得する関数がありますので、それで"-"の位置を検索してSUBSTRと組み合わせれば一応文字列操作でできます。
汚いですけど、Oracleの例です(10gで動作確認)
うん、美しくない。 "-"の出現回数が2回でなければならないって縛りもあるので、 ストアド使った方が良いでしょうね。 #一応Caseとか使えばできはしますが、保守を考えるとあんまりお奨めできません。 |