Mysql中replace、regxp正則表達式替換用法

今天一個朋友問我,如果將數據庫中查到的類似於“./uploads/110100_cityHotel_北京富豪華賓館.jpg”這樣的格式都修改爲“./uploads/110100cityHotel北京富豪華賓館.jpg”這樣的格式。我本人是沒有這樣處理過數據的,但是我知道mysql是可以使用replace做到的,而且正則表達式也可以做到。

如何做呢?

我們只需要這樣一條語句即可,

  update master_data.md_employee set name=replace(name,"_",'') where id = 825;  -- 注replace(字段名,"需要替換的字符","替換的字符"),這樣即可。

   

在Mysql中,replace和regxp主要是通過sql語句實現數據的替換。

我們先來說說replace 的具體用法。

mysql replace用法 

1.replace into

 代碼如下


replace into table (id,name) values('1′,'aa'),('2′,'bb') 

此語句的作用是向表table中插入兩條記錄。如果主鍵id爲1或2不存在 

就相當於

 代碼如下


insert into table (id,name) values('1′,'aa'),('2′,'bb') 

如果存在相同的值則不會插入數據

2.replace(object,search,replace) 

把object中出現search的全部替換爲replace

 代碼如下


select replace('www.111cn.net','w','Ww')—>WwWwWw.111cn.net 

例:把表table中的name字段中的aa替換爲bb 

update table set name=replace(name,'aa','bb')


由MySQL提供的模式匹配的其它類型是使用擴展正則表達式

當你對這類模式進行匹配測試時,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。 

擴展正則表達式的一些字符是:

· ‘.'匹配任何單個的字符。 

· 字符類“[...]”匹配在方括號內的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。爲了命名字符的範圍,使用一個“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何數字。 

· “ * ”匹配零個或多個在它前面的字符。例如,“x*”匹配任何數量的“x”字符,“[0-9]*”匹配任何數量的數字,而“.*”匹配任何數量的任何字符。


如果REGEXP模式與被測試值的任何地方匹配,模式就匹配(這不同於LIKE模式匹配,只有與整個值匹配,模式才匹配)。 

爲了定位一個模式以便它必須匹配被測試值的開始或結尾,在模式開始處使用“^”或在模式的結尾用“$”。

爲了說明擴展正則表達式如何工作,下面使用REGEXP重寫上面所示的LIKE查詢:

1.爲了找出以“d”開頭的名字,使用“^”匹配名字的開始:

SELECT * FROM master_data.md_employee WHERE name REGEXP '^d';


這樣的結果集是不區分大小寫的,如果你想強制使REGEXP比較區分大小寫,使用BINARY關鍵字使其中一個字符串變爲二進制字符串。該查詢只匹配名稱首字母的小寫‘d'。

SELECT * FROM master_data.md_employee WHERE name REGEXP BINARY'^d';


爲了找出以“love”結尾的名字,使用“$”匹配名字的結尾: 

SELECT id,name FROM master_data.md_employee WHERE name REGEXP 'love$';


爲了找出包含一個“w”的名字,使用以下查詢: 

SELECT id,name FROM master_data.md_employee WHERE name REGEXP 'w';


既然如果一個正則表達式出現在值的任何地方,其模式匹配了,就不必在先前的查詢中在模式的兩側放置一個通配符以使得它匹配整個值,就像你使用了一個SQL模式那樣。 

爲了找出包含正好5個字符的名字,使用“^”和“$”匹配名字的開始和結尾,和5個“.”實例在兩者之間:

SELECT id,name FROM master_data.md_employee WHERE name REGEXP '^.....$';


你也可以使用“{n}”“重複n次”操作符重寫前面的查詢:

SELECT id,name FROM master_data.md_employee WHERE name REGEXP '^.{5}$';


這些知識一些簡單的mysql的replace和regxp的用法,如果想深入的學習,請關注我,我在之後的文章會將具體的例子以及用法寫出,(*^__^*) 嘻嘻……


發佈了58 篇原創文章 · 獲贊 106 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章