sql >> Databáze >  >> RDS >> Mysql

Maskování výstupu MySQL (tj. telefonní číslo, SSN atd. formátování displeje)

Tady je to, s čím jsem přišel, pokud máte nějaké úpravy nebo vylepšení, zanechte je prosím jako komentáře a já kód aktualizuji. V opačném případě, pokud se vám to líbí, nenechte si to narazit. Užijte si to!

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 ;

Zde je návod, jak jej používat... Funguje pouze pro celá čísla (tj. SSN Ph# atd.)

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. Zobrazit všechny tabulky. Funkce podobná popisu

  2. Formulář pro odeslání nezůstane na stejné stránce

  3. Dotaz na řetězec ze sloupce int?

  4. Je možné indexování napříč tabulkami?