该函数名为 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

MySQL 自定义函数:getPhone - 从字符串中提取手机号

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

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