前回作った顧客データで、今回はREGEXP_REPLACE関数を使ってデータをマスキングしてみたいと思います!この記事を読むことで、REGEXP_REPLACE関数の使い方がわかるようになります。※データマスキングとは、元の文字や数字を別の文字や数字に置換してデータを隠すことです
データ準備
REGEXP_LIKE関数を試すために、データを用意しました!
顧客ID | 名 | 性 | メールアドレス | 電話番号 |
---|---|---|---|---|
1 | Taro | Ito | taro.ito@gmail.com | 08023398165 |
2 | Hanako | Kobayashi | hanako.kobayashi@gmail.com | 08089612966 |
3 | Ichiro | Kato | ichiro.kato@gmail.com | 08064353174 |
4 | Taro | Nakamura | taro.nakamura@gmail.com | 08014860647 |
5 | Ichiro | Kato | ichiro.kato@gmail.com | 08044267467 |
6 | Jiro | Kato | jiro.kato@gmail.com | 08036158106 |
7 | Kenichi | Tanaka | kenichi.tanaka@gmail.com | 08035587214 |
8 | Jiro | Suzuki | jiro.suzuki@gmail.com | 08032635925 |
9 | Yoshi | Kobayashi | yoshi.kobayashi@gmail.com | 08047434156 |
10 | Yoshi | Kato | yoshi.kato@gmail.com | 08056531654 |
前回の記事を確認して、テストデータを作ってみてください。
上記のデータをマスキングしてみました。
顧客ID | 名 | 性 | メールアドレス | 電話番号 |
---|---|---|---|---|
1 | ◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
2 | ◼︎◼︎◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
3 | ◼︎◼︎◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
4 | ◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
5 | ◼︎◼︎◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
6 | ◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
7 | ◼︎◼︎◼︎◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
8 | ◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
9 | ◼︎◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
10 | ◼︎◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
では、REGEXP_REPLACEの使い方をみていきましょう!
REGEXP_REPLACEを使う方法
REGEXP_REPLACE関数は、正規表現を使って特定のパターンに一致する文字列を別の文字列に置換することができます。
REGEXP_REPLACE(対象の文字列, 正規表現, 置換後の文字列)
では、顧客データをマスキングした状態で取得したいと思います。
CUSTOMER_ID | FIRST_NAME | LAST_NAME | PHONE | |
---|---|---|---|---|
1 | Taro | Ito | taro.ito@gmail.com | 08023398165 |
↓
SELECT
customer_id AS "顧客ID",
REGEXP_REPLACE(first_name, '.', '◼︎') AS "名",
REGEXP_REPLACE(last_name, '.', '◼︎') AS "性",
REGEXP_REPLACE(
email,
'([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)',
'dummy@yahoo.co.jp'
) AS "メールアドレス",
REGEXP_REPLACE(
phone,
'(\d{2,4})(\d{2,4})(\d{4})',
'000-0000-0000'
) AS "電話番号"
FROM
customers
WHERE
customer_id = 1
↓
顧客ID | 名 | 性 | メールアドレス | 電話番号 |
---|---|---|---|---|
1 | ◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
マスキングすることができていたので、UPDATE文でデータを更新します。
UPDATE
customers
SET
first_name = REGEXP_REPLACE(first_name, '.', '◼︎'),
last_name = REGEXP_REPLACE(last_name, '.', '◼︎'),
email = REGEXP_REPLACE(
email,
'([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)',
'dummy@yahoo.co.jp'
),
phone = REGEXP_REPLACE(
phone,
'(\d{2,4})(\d{2,4})(\d{4})',
'000-0000-0000'
)
WHERE
customer_id = 1;
データがマスキングされたか確認してみます。
SELECT
customer_id,
first_name,
last_name,
email,
phone
FROM
customers
WHERE
ROWNUM <= 3;
CUSTOMER_ID | FIRST_NAME | LAST_NAME | PHONE | |
---|---|---|---|---|
1 | ◼︎◼︎◼︎◼︎ | ◼︎◼︎◼︎ | dummy@yahoo.co.jp | 000-0000-0000 |
2 | Hanako | Kobayashi | hanako.kobayashi@gmail.com | 08089612966 |
3 | Ichiro | Kato | ichiro.kato@gmail.com | 08064353174 |
3レコードだけ取得してみましたが、顧客ID1のレコードがちゃんと更新されていることが確認できました!
まとめ
REGEXP_REPLACEは正規表現とマッチした文字列を置換してくれるものだと覚えておきましょう!
コメント