MySQL 自定义函数:getPhone - 从字符串中提取手机号
该函数名为 getPhone,参数为一个长度为 3000 的字符串 f_string,返回值为一个长度为 11 的字符串 phone。函数采用 utf8 编码。
函数中先定义了四个变量:isPhone(判断是否是手机号的标志)、ipos(当前扫描的字符位置)、phone(提取出的手机号)、c_char(当前扫描到的字符)。
接下来使用正则表达式判断 f_string 中是否包含手机号,若有,则进入循环,通过扫描字符串中的字符,找出第一个满足手机号格式的子串并返回。
具体做法是:如果扫描到 '1',则检查该位置开始的 11 个字符是否为手机号格式,若是,则将该子串赋值给 phone,否则 ipos 加 11。若扫描到的不是 '1',则 ipos 加 1。当 ipos 等于 f_string 长度时,退出循环。
最后将 phone 作为函数返回值。
```sqlCREATE DEFINER=ioc@% FUNCTION getPhone(f_string varchar(3000) CHARACTER SET utf8mb4) RETURNS varchar(11) CHARSET utf8BEGIN
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;
E
原文地址: http://www.cveoy.top/t/topic/ola2 著作权归作者所有。请勿转载和采集!