转 mysql5.7实现regex_replace正则替换功能(亲测可用)
1.开启mysql自定义函数支持
a.查看mysql当前是否支持编写自定义:
show variables like '%fun%';
1
b.log_bin_trust_function_creators=OFF表示没有开启自定义函数。输入开启命令。
set global log_bin_trust_function_creators=1;
1
注:此处不开启,后面自定义函数写好。调用不起作用!
2.编写regexp_replace()自定义函数
a.编写代码如下:
#创建前删除已经创建的自定义函数 drop function if exists regexp_replace; CREATE FUNCTION `regexp_replace`(ori_str LONGTEXT,pattern VARCHAR(1000),repl_str VARCHAR(1000)) RETURNS longtext CHARSET utf8mb4 DETERMINISTIC BEGIN DECLARE tmp_str LONGTEXT; DECLARE target_str LONGTEXT; DECLARE str0 LONGTEXT; DECLARE i1 INT; DECLARE i2 INT; # 此处假设MySQL5.7的正则表达式匹配类型是非贪婪模式,目前没有在官方文档内确认。 # 本函数的基本逻辑是,先从原文本开头不断的裁剪,不能匹配上时,则证明找到了目标文本的开头;如法炮制,找到目标文本的结尾。以此确定目标文本的位置。 # 示例:若原文本是AABBCC,正则表达式为B+,大致流程如下 # i1=1, tmp_str="AABBCC", match # i1=2, tmp_str="ABBCC", match # i1=3, tmp_str="BBCC", match # i1=4, tmp_str="BCC", match # i1=5, tmp_str="CC", unmatch # 定位开始位置为4 # i2=6, tmp_str="BCC", match # i2=5, tmp_str="BC", match # i2=4, tmp_str="B", match # i2=4, tmp_str="", unmatch # 定位结束位置为4 # 所以输出结果是replace("AABBCC", "B", "") # Warning:此函数效率比较差,而且在重复replace的时候,会重复匹配相同的位置,有违正则表达式的匹配逻辑。 # Warning:此函数在pattern能匹配repl_str会进入死循环,优化后再考虑加入报错机制。 # Warning:函数返回的是长文本格式,在存入数据库之前考虑转换一下数据类型。 SET tmp_str = ori_str; # 强迫症行为 # 循环查找以替换所有的目标字符串 loop0: LOOP IF NOT tmp_str REGEXP pattern THEN LEAVE loop0; END IF; # 目前初始值多设了一位 SET i1 = 1; SET i2 = CHAR_LENGTH(tmp_str); # 循环从头裁剪字符串 loop1: LOOP SET str0 = SUBSTR(tmp_str, i1, i2-i1+1); IF NOT str0 REGEXP pattern THEN SET i1 = i1-1; # 当不能匹配上时,还原至上次循环到的位置。 LEAVE loop1; ELSE SET i1 = i1+1; END IF; END LOOP; # 循环从尾裁剪字符串 loop2: LOOP SET str0 = SUBSTR(tmp_str, i1, i2-i1+1); IF NOT str0 REGEXP pattern THEN SET i2 = i2+1; # 当不能匹配上时,还原至上次循环到的位置。 LEAVE loop2; ELSE SET i2 = i2-1; END IF; END LOOP; # 根据定位到的头和尾,截取目标文本 SET target_str = SUBSTR(tmp_str, i1, i2-i1+1); # 替换原文本中的目标文本 SET tmp_str = REPLACE(tmp_str, target_str, repl_str); END LOOP; RETURN tmp_str; END
b.上述代码执行后,检查下是否创建成功。结果已经创建成功。...
浏览更多内容请先登录。
立即注册
更新于:2023-08-01 20:55:04
|-转 REGEXP_REPLACE 替换匹配的字符串
SELECT id,personal_phone,REPLACE (personal_phone,REGEXP_REPLACE (personal_phone,'[1][3456789][0-9]{9}','') ,'') as new_str from table WHERE `personal_phone` NOT REGEXP '^[1][3456789][0-9]{9}$'
update table set personal_phone = REPLACE (personal_phone,REGEXP_REPLACE (personal_phone,'[1][3456789][0-9]{9}','') ,'') WHERE `personal_phone` NOT REGEXP '^[1][3456789][0-9]{9}$' limit 10
写在最后,mysql5.7用的是上文mysql5.7实现regex_replace正则替换功能(亲测可用) - 查问我看 - 查问网 (chawen.org)自定义的 REGEXP_REPLACE ...
浏览更多内容请先登录。
立即注册
更新于:2023-08-01 21:18:43
相关内容
查问我看笔记功能的实现过程-全文搜索待开启,试试yiisoft/yii2-sphinx
yii2框架中使用sphinx使用搜索引擎 多条件选择搜索
运行php composer.phar require --prefer-dist yiisoft/yii2-sphinx
Mysql问题整理
Yii2数据库报错-SQLSTATE[HY093]: Invalid parameter number: no para...
Mysql server has gone away 报错原因分析及解决办法
mysql 警告 could not be resolved: Name or service not known
Mysql用特殊字符设置密码遇到的问题
Mysql的函数substring使用注意事项
MySQL 5.7内存使用分析
mysql 命令整理
【mysql】主键、普通索引、唯一索引和全文索引的比较
没有接收到要导入的数据。可能是文件名没有提交,也可能是文件大小超出 PHP 限...
Mysql 报错'SQLSTATE[HY000] [1045] Access denied for user 'root'@'...
php连接mysql报错The server requested authentication method unknown to ...
Mysql登录提示ERROR 2003 (HY000): Can't connect to MySQL server o...
Mysql报错SQLSTATE[HY000]: General error: 1366 Incorrect string ...
全网最详尽的Centos和Windows系统 Mysql8 root忘记密码解决办法
mysql数据库操作 报错 #1030 - Got error 176 "Read page with wrong ...
Linux系统彻底卸载MySQL数据库
Linux下mysql5.7忘记root密码的解决方法
ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to...
mysql创建数据类型为JSON时,显示的longtext数据类型
mysql 修改编码utf8mb4依旧无法保存表情 Incorrect string value: '\x解决办法
MySQL 中 不等于 会过滤掉 Null 的问题
RECOVER_YOUR_DATA勒索恢复
Mysql知识学习
MySQL 8.0 索引特性1-函数索引
MySQL字符串函数substring:字符串截取
Mysql的临时变量取值3例
mysql查找字符串出现位置
mysql 更改AUTO_INCREMENT 失败的解决办法
MYSQL 数据库导入导出命令
mysql如何判断不包含某个字符串
Mysql中不要用操作符和函数名等等来命名字段
ORM 实例教程
Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
MySQL 中 datetime 和 timestamp 的区别与选择
Invalid default value for ‘updated_at‘
设置MySQL的group_concat_max_len长度为最大值
MySQL中concat()、concat_ws()、group_concat()函数使用技巧与心得
mysql的left join和inner join的效率对比,以及如何优化
mysql 索引优化十例
MySQL数据表中有自增长主键时如何插入数据
bill_20210927.sql">mysqldump按条件导出mysql数据库数据
mysqli的基本使用
推荐内容