У меня была такая же проблема! Вы можете увидеть, как я решил это здесь .
Вот функции, которые я должен был создать и использовать, которые отлично сработали:
CREATE FUNCTION IsNumeric (val varchar(255)) RETURNS tinyint
RETURN val REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
CREATE FUNCTION NumericOnly (val VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
DECLARE idx INT DEFAULT 0;
IF ISNULL(val) THEN RETURN NULL; END IF;
IF LENGTH(val) = 0 THEN RETURN ""; END IF;
SET idx = REPLACE(val,".","");
SET idx = LENGTH(val);
WHILE idx > 0 DO
IF IsNumeric(SUBSTRING(val,idx,1)) = 0 THEN
SET val = REPLACE(val,SUBSTRING(val,idx,1),"");
SET idx = LENGTH(val)+1;
END IF;
SET idx = idx - 1;
END WHILE;
RETURN val;
END;
CREATE FUNCTION FormatPhone (val VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
SET val = RIGHT(CONCAT("0000000000",NumericOnly(val)),10);
RETURN CONCAT("(",LEFT(val,3),") ",LEFT(RIGHT(val,7),3),"-",RIGHT(val,4));
END;
Используйте его для форматирования номера телефона:
SELECT FormatPhone(PhoneNumberColumn) FROM TableName;
Или вот так, чтобы получить только цифры:
SELECT NumericOnly(PhoneNumberColumn) FROM TableName;