Может кому пригодятся функции для мускула:
1) mask (Форматирует данные, удобно для выборки из базы телефонов)
Код: Выделить всё
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `mask`(`unformatted_value` BIGINT, `format_string` CHAR(32)) RETURNS char(1) CHARSET utf8
DETERMINISTIC
BEGIN
# Example:
# SELECT mask(123456789,'###-##-####');
# SELECT mask(123456789,'(###) ###-####');
# SELECT mask(123456789,'###-#!##@(###)');
# 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 ;
2) IPv6 для нетапа
Код: Выделить всё
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `net_ntoa_ipv6`(ip BIGINT, ip_ext BIGINT) RETURNS char(48) CHARSET utf8 COLLATE utf8_unicode_ci
DETERMINISTIC
BEGIN
# Example: SELECT net_ntoa_ipv6(ip,ip_ext) FROM UTM5.ip_groups;
SELECT
LOWER(
CONCAT(
IF (
ip_ext != 0,
CONCAT_WS(
':',
SUBSTR(LPAD(HEX(ip_ext), 16, '0'), 1, 4),
SUBSTR(LPAD(HEX(ip_ext), 16, '0'), 5, 4),
SUBSTR(LPAD(HEX(ip_ext), 16, '0'), 9, 4),
RIGHT(LPAD(HEX(ip_ext), 16, '0'), 4)
),
""
),
IF (ip_ext != 0, ':', ""),
IF (
ip_ext != 0,
CONCAT_WS(
':',
SUBSTR(LPAD(HEX(ip), 16, '0'), 1, 4),
SUBSTR(LPAD(HEX(ip), 16, '0'), 5, 4),
SUBSTR(LPAD(HEX(ip), 16, '0'), 9, 4),
RIGHT(LPAD(HEX(ip), 16, '0'), 4)
),
INET_NTOA(ip & 0xffffffff)
)
)
) AS result INTO @result ;
RETURN @result ;
END$$
DELIMITER ;