Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да избера между 1-вия ден на текущия месец и текущия ден в MySQL?

  2. Ако променливата е равна на стойност php

  3. Заявката за суми на Mysql връща неправилен резултат при използване на множество обединявания

  4. Кой е най-добрият начин за съхраняване на медийни файлове в база данни?

  5. опитвайки се да получа броя на месеците