sql >> Databasteknik >  >> RDS >> Mysql

MySQL-utdatamaskering (t.ex. telefonnummer, SSN, etc. skärmformatering)

Här är vad jag kom fram till, om du har några ändringar eller förbättringar vänligen lämna dem som kommentarer så uppdaterar jag koden. Annars om du gillar det, kom inte att stöta på det. Njut!

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 ;

Så här använder du det... Det fungerar bara för heltal (dvs. SSN Ph# etc.)

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. ROW_NUMBER i SQL – Välj toppexempel i SQL och SQL Server

  2. MySQL Fyll i saknade datum mellan två datum för en given status

  3. Få den vänstra delen av en sträng i SQL Server (T-SQL)

  4. Topp 5 datamodelleringsverktyg för SQL Server