sql >> データベース >  >> RDS >> Mysql

MySQL出力マスキング(つまり、電話番号、SSNなどの表示フォーマット)

    これが私が思いついたものです。変更や改善があれば、コメントとして残してください。コードを更新します。そうでなければ、あなたがそれを好きなら、それをぶつけないでください。お楽しみください!

    DELIMITER //
    
    CREATE FUNCTION mask (unformatted_value BIGINT, format_string CHAR(32))
    RETURNS CHAR(32) DETERMINISTIC
    
    BEGIN
    # Declare variables
    DECLARE input_len TINYINT;
    DECLARE output_len TINYINT;
    DECLARE temp_char CHAR;
    
    # Initialize variables
    SET input_len = LENGTH(unformatted_value);
    SET output_len = LENGTH(format_string);
    
    # Construct formated string
    WHILE ( output_len > 0 ) DO
    
    SET temp_char = SUBSTR(format_string, output_len, 1);
    IF ( temp_char = '#' ) THEN
    IF ( input_len > 0 ) THEN
    SET format_string = INSERT(format_string, output_len, 1, SUBSTR(unformatted_value, input_len, 1));
    SET input_len = input_len - 1;
    ELSE
    SET format_string = INSERT(format_string, output_len, 1, '0');
    END IF;
    END IF;
    
    SET output_len = output_len - 1;
    END WHILE;
    
    RETURN format_string;
    END //
    
    DELIMITER ;
    

    使用方法は次のとおりです...整数(SSN Ph#など)に対してのみ機能します

    mysql> select mask(123456789,'###-##-####');
    +-------------------------------+
    | mask(123456789,'###-##-####') |
    +-------------------------------+
    | 123-45-6789                   |
    +-------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select mask(123456789,'(###) ###-####');
    +----------------------------------+
    | mask(123456789,'(###) ###-####') |
    +----------------------------------+
    | (012) 345-6789                   |
    +----------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select mask(123456789,'###-#!##@(###)');
    +----------------------------------+
    | mask(123456789,'###-#!##@(###)') |
    +----------------------------------+
    | [email protected](789)                   |
    +----------------------------------+
    1 row in set (0.00 sec)
    


    1. 文字列内の絵文字を検出する

    2. Cx-Freeze:Showwarning AttributeError:'NoneType'オブジェクトに属性がありません'write'

    3. SQL Server AlwaysOn(可用性グループ)のアーキテクチャとステップバイステップのインストール-4データベースの追加と削除の手順

    4. エンティティフレームワークは、コンパイルのたびに初めてロードするのが非常に遅い