日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2024/10/6 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql错误修改数据_使用正则表达式快速修改mysql中错误的varchar类型数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

昨天早上發現日志中有錯誤信息: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类型数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。