热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql正则替换字符串_mysql正则表达式替换字符串

mysqlDELIMITER$$USE`ytt`$$DROPFUNCTIONIFEXISTS`func_instr_simple_ytt`$$CREATEDEFINER`root`

mysql

DELIMITER $$

USE `ytt`$$

DROP FUNCTION IF EXISTS `func_instr_simple_ytt`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `func_instr_simple_ytt`(

f_str VARCHAR(1000), — Parameter 1

f_substr VARCHAR(100),  — Parameter 2

f_replace_str varchar(100),

f_times int — times counter.only support  3.

) RETURNS varchar(1000)

BEGIN

declare v_result varchar(1000) default ‘ytt’; — result.

declare v_substr_len int default 0; — search string length.

set f_times = 3; — only support  3.

set v_substr_len = length(f_substr);

select instr(f_str,f_substr) into @p1; — First real position .

select instr(substr(f_str,@p1+v_substr_len),f_substr) into @p2; Secondary virtual position.

select instr(substr(f_str,@p2+ @p1 +2*v_substr_len – 1),f_substr) into @p3; — Third virtual position.

if @p1 > 0  && @p2 > 0 && @p3 > 0 then — Fine.

select

concat(substr(f_str,1,@p1 + @p2 + @p3 + (f_times – 1) * v_substr_len  – f_times)

,f_replace_str,

substr(f_str,@p1 + @p2 + @p3 + f_times * v_substr_len-2)) into v_result;

else

set v_result = f_str; — Never changed.

end if;

— Purge all session variables.

set @p1 = null;

set @p2 = null;

set @p3 = null;

return v_result;

end;

$$

DELIMITER ;

— 调用函数来更新:

mysql> update y1 set str1 = func_instr_simple_ytt(str1,’action’,’dble’,3);

Query OK, 20 rows affected (0.12 sec)

Rows matched: 20  Changed: 20  Warnings: 0

2. 导出来用sed之类的工具替换掉在导入,步骤如下:(推荐使用)

1)导出表y1的记录。

mysqlmysql> select * from y1 into outfile ‘/var/lib/mysql-files/y1.csv’;Query OK, 20 rows affected (0.00 sec)

2)用sed替换导出来的数据。

shellroot@ytt-Aspire-V5-471G:/var/lib/mysql-files#  sed -i ‘s/action/dble/3’ y1.csv

3)再次导入处理好的数据,完成。

mysql

mysql> truncate y1;

Query OK, 0 rows affected (0.99 sec)

mysql> load data infile ‘/var/lib/mysql-files/y1.csv’ into table y1;

Query OK, 20 rows affected (0.14 sec)

Records: 20  Deleted: 0  Skipped: 0  Warnings: 0

以上两种还是推荐导出来处理好了再重新导入,性能来的高些,而且还不用自己费劲写函数代码。

那MySQL 8.0 对于以上的场景实现就非常简单了,一个函数就搞定了。

mysqlmysql> update y1 set str1 = regexp_replace(str1,’action’,’dble’,1,3) ;Query OK, 20 rows affected (0.13 sec)Rows matched: 20  Changed: 20  Warnings: 0

还有一个regexp_instr 也非常有用,特别是这种特指出现第几次的场景。比如定义 SESSION 变量@a。

mysqlmysql> set @a = ‘aa bb cc ee fi lucy  1 1 1 b s 2 3 4 5 2 3 5 561 19 10 10 20 30 10 40’;Query OK, 0 rows affected (0.04 sec)

拿到至少两次的数字出现的第二次子串的位置。

mysqlmysql> select regexp_instr(@a,'[:digit:]{2,}’,1,2);+————————————–+| regexp_instr(@a,'[:digit:]{2,}’,1,2) |+————————————–+|                                   50 |+————————————–+1 row in set (0.00 sec)

那我们在看看对多字节字符支持如何。

mysql

mysql> set @a = ‘中国 美国 俄罗斯 日本 中国 北京 上海 深圳 广州 北京 上海 武汉 东莞 北京 青岛 北京’;

Query OK, 0 rows affected (0.00 sec)

mysql> select regexp_instr(@a,’北京’,1,1);

+——————————-+

| regexp_instr(@a,’北京’,1,1)   |

+——————————-+

|                            17 |

+——————————-+

1 row in set (0.00 sec)

mysql> select regexp_instr(@a,’北京’,1,2);

+——————————-+

| regexp_instr(@a,’北京’,1,2)   |

+——————————-+

|                            29 |

+——————————-+

1 row in set (0.00 sec)

mysql> select regexp_instr(@a,’北京’,1,3);

+——————————-+

| regexp_instr(@a,’北京’,1,3)   |

+——————————-+

|                            41 |

+——————————-+

1 row in set (0.00 sec)

那总结下,这里我提到了 MySQL 8.0 的两个最有用的正则匹配函数 regexp_replace 和 regexp_instr。针对以前类似的场景算是有一个完美的解决方案。


推荐阅读
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
author-avatar
Opera2502898747
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有