概要
アンチパターンまっしぐらな以下の要素をマスクしてくれる素敵なストアドファンクションを作りました。
カンマ区切りのメールアドレスが入ったカラムとかアンチパターン以外の何物でもないので、
このファンクション使う機会がなければいいと思います。
でも時には必要になることもあるでしょう。あるでしょうとも!!!
要件
- カンマで区切られた複数のメールアドレスが存在する
- ドメインパートを残した状態でメールアドレスをSHA1でハッシュ化する
- なるべく早い方がいい
ストアドファンクション
ストアドファンクションそのものの説明はここでは避けます。
内容はこちら。
mask_mail.sql
DELIMITER //
CREATE FUNCTION mask_mails(mail VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
SET @mail = mail;
SET @tmp = '';
SET @masked = '';
WHILE
IF LEFT(@mail, LOCATE(',', @mail)) = ''
THEN RETURN CONCAT(@masked, SHA1(LEFT(@mail, LOCATE('@', @mail) - 1)), MID(@mail, LOCATE('@', @mail)));
ELSE
SET @tmp = LEFT(@mail, LOCATE(',', @mail) - 1);
SET @masked = CONCAT(@masked, SHA1(LEFT(@tmp, LOCATE('@', @tmp) - 1)), MID(@tmp, LOCATE('@', @tmp)), ',')
SET @mail = MID(@mail, LOCATE(',', @mail, 1) + 1);
END IF;
END WHILE;
END;
//
DELIMITER;