该函数通过使用正则表达式匹配手机号码的格式,确保仅返回符合格式要求的手机号码。在循环中,每次检测到符合要求的手机号码后,会结束循环并返回该手机号码,避免了将有效数据分割的问题。同时,如果字符串中没有符合要求的手机号码,则返回空字符串。

CREATE DEFINER=`ioc`@`%` FUNCTION `getPhone`(f_string varchar(3000) CHARACTER SET utf8mb4) RETURNS varchar(11) CHARSET utf8
BEGIN

DECLARE isPhone INT(1) DEFAULT 0;

DECLARE ipos INT(11) DEFAULT 0;

DECLARE phone VARCHAR(11) DEFAULT '';

DECLARE c_char VARCHAR(1) CHARACTER SET utf8mb4 DEFAULT '';

SELECT f_string REGEXP '[1][35678][0-9]{9}' INTO isPhone;

IF (isPhone=1) THEN

f_loop:LOOP

SELECT SUBSTR(f_string,ipos,1) INTO c_char;

IF (c_char='1') THEN

SELECT SUBSTR(f_string,ipos,11) INTO phone;

SELECT phone REGEXP '[1][35678][0-9]{9}' INTO isPhone;

IF (isPhone=1) THEN

LEAVE f_loop;

ELSE

SET ipos = ipos+11;

END IF;

END IF;

SET ipos = ipos+1;

IF ipos=LENGTH(f_string) THEN

LEAVE f_loop;

END IF;

END LOOP f_loop;

END IF;

RETURN phone;

END
MySQL 函数实现手机号码提取,避免有效数据分割

原文地址: http://www.cveoy.top/t/topic/olaV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录