昨天早上发现日志中有错误信息:Integer到String类型转换异常。

由于程序问题,导致数据库中的varchar列存入的json字符串不符合要求,这些json字符串在反序列化成Map之后就会报错。

现在要修改不合法数据。比如goods表的desc列

//当前格式

{"name":"aaa","age":24,"height":1.73}

{"name":"bbb","age":30,"weight":65.20}

//目标格式

{"name":"aaa","age":"24","height":"1.73"}

{"name":"bbb","age":"30","weight":"65.20"}

1、如何查出有问题的数据?

因为json数据并不规范,直接使用like查询不太现实,主要是分支有点多。

数据的共同问题就是数字没有被引号包围。所以只需要查出冒号:之后直接是数字的数据。

查询MysqL的文档之后,使用如下SQL查询:

select * from goods where desc regexp ':[[:digit:]]+'

select * from goods where desc regexp ':[[:digit:]]+\\,'这个没用

MysqL的正则表达式跟perl、unix风格的有较大的差异。其中[[:digit:]]表示数字。 \\,用来匹配json中的逗号

2、如何修改有问题的数据?

直接用MysqL修改?那就要把符合条件的数字(组)提取出来,粗略查了下文档,没查到,放弃。

用UE(UltraEdit)编辑器修改。UE支持三种正则表达式:Perl、Unix、和UE。

如何查询?以前常用Unix风格的正则表达式查询没问题,UE风格正则请参考文档,有点弱。

如何替换?这才最关键。要替换就得提取匹配的组。如何提取?UE的帮助文档如是说:

^(*^)

在表达式加上括号或标签在替换命令中使用。正则表达式中可以有 9 个表达式标签,数字根据它们在正则表达式中的次序确定数字。

相应的替换表达式是 ^x,x 的范围是 1-9。例如: 如果 ^(h*o^) ^(f*s^) 匹配“hello folks”,那么^2 ^1 表示将用“folks hello”替换它。

也就是说,用^(*^)这货来查找,用^1引用第一个组,^2引用第二个组。 例子里,^2引用了folks,^1引用了hello。

对于我遇到的问题

首先,要匹配数字,最简单的[0-9],+表示至少1个,++表示0个或多个,[.]匹配小数点。所以匹配整数和小数可以用[0-9]+[.]++[0-9]++。因为后面要提取数字,所以用^([0-9]+[.]++[0-9]++^)

其次,出错的数据都是冒号后面直接带数字。所以表达式为:^([0-9]+[.]++[0-9]++^)。这样就把正确数据和错误数据区分了。

再次,如果要匹配key比如age、weight,用^("[~"]+"^):^([0-9]+[.]++[0-9]++^)。[~"]匹配引号以外的字符。这样的话,想干点什么就方便多了,比如根据json生成表格。

然后,打开查找对话框,选中正则表达式,点开高级,选正则表达式引擎为UltraEdit,查找表达式^("[~"]+"^):^([0-9]+[.]++[0-9]++^),替换表达式^1 :"^2",点击替换。 最后,替换完了,使用列编辑模式生成udpate语句,带上where条件和结束符;最后交给客户端批量执行。 几百条数据有问题,如果自己手工改,肯定早就改完了。不过掌握此种方法,以后类似的问题就容易多了。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

mysql错误修改数据_使用正则表达式快速修改mysql中错误的varchar类型数据相关推荐

  1. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  2. numeric转换varchar_数据库中varchar类型数据转换为numeric类型

    关于数据库中varchar/nvarchar类型数据的获取注意事项 当在页面后台获取数据库表中某字段的数据时,需注意该数据的类型.防止因实际数据的字符长度因达不到指定数据类型规定的字符长度而导致空格的 ...

  3. MATLAB读取文件中的所有同类型数据,并记录其峰值

    实现自动读取某一文件夹中的所有同类型数据文件(.txt..xls..csv等格式),并依次处理数据文件(如找到数据的峰值),最后将峰值信息写入txt文件中. %%读取文件中的所有数据,并记录其峰值%% ...

  4. linux mysql 误删系统文件恢复_干货分享丨如何恢复Linux下误删/etc目录数据

    对于运维工作者来说,可能最让人担心的,是服务器宕机: 最让人无助的,是被DDOS: 而最让人心惊肉跳的,是rm -rf *这个命令-- 当你执行rm -rf命令时,万一哪个变量没赋值 听说过被删空服务 ...

  5. mysql导入数据表越来越慢,快速解决mysql导数据时,格式不对、导入慢、丢数据的问题...

    快速解决mysql导数据时,格式不对.导入慢.丢数据的问题 如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb ...

  6. hive能加快MySQL查询速度吗_建立索引可以加快表中数据查询的速度吗

    首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合. 如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特 ...

  7. mysql 刷新二进制日志_使用binlog日志恢复MySQL数据库删除数据的方法

    binlog日志简介: binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间. b ...

  8. 怎么看mysql的最大连接数_怎么查看和修改 MySQL 的最大连接数?

    MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看 mysql> show variables like '%connections'; 此命令将得到类似以下的输 ...

  9. mysql double 转 字符串_没想到!在MySQL数据库中的数据有这三种类型!

    MySQL数据库是一个或多个数据列构成二维表,它的每一种数据列都有特定类型,而类型决定MySQL是怎么看待该列数据,如果把整型数值存放到字符类型的列中,MySQL则会把它当成字符串来处理. MySQL ...

最新文章

  1. 每日一皮:简历上写着熟练掌握…实际往往是这样的...
  2. Java消息中间件(activeMQ)
  3. 女人 不要让身边的男人太累
  4. 【H2 Database】shell
  5. 使用主题文件(包含CSS文件)时遇到的问题
  6. 解决python访问中突发requests.exceptions.ConnectionError:Max retries exceeded with url报错
  7. Zookeeper - 简述ZAB 协议和zookeeper
  8. android 多个模块,Android 模块化中两个模块之间传递model
  9. ANSYS 有限元分析 接触分析
  10. ong拼音汉字_汉语拼音ong的发音方法
  11. 程序员接私活完整攻略
  12. QQ游戏可以进房间,但上不了桌,无法入坐的一次解决经历
  13. 惠普HP Deskjet F4238 多功能一体机驱动
  14. Activity启动另一个Activity并返回的完整生命周期
  15. IIS绑定主机屏蔽恶意解析域名的操作
  16. EDA学习1.4之二极管又回来了
  17. 认证 (Authentication) 和授权 (Authorization)
  18. Oracle磁盘恢复,探索Oracle之RMAN_07 磁盘损坏数据丢失恢复
  19. 通过百度地图模糊查询获取详细地址?正则匹配
  20. 小米手机刷机固件下载链接

热门文章

  1. VBA中访问Web Service
  2. python pytorch自定义_PyTorch使用自定义模块创建数据模型
  3. jtree+mysql_Swing: JTree显示 图标 + 文字 | 学步园
  4. 计算机等级考试二级c语言笔试,全国计算机等级考试二级C语言笔试试题和答案.doc...
  5. php遍历文件夹下文件内容_php遍历文件夹下所有文件的代码示例
  6. php curl viewstate,php curl – 发布asp.net viewstate值
  7. 今天小暑是什么时间_小暑适合发朋友圈的说说 小暑吐槽天气热的搞笑幽默说说...
  8. 【小白学习C++ 教程】十二、C++面向对象编程中的构造函数和析构函数
  9. 十一、深入Java的判断语句
  10. js调试微博登录案例