萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql替換字符串 批量替換sql語句

mysql替換字符串 批量替換sql語句

在mysql字符替換我們常用用update更新語句與replace替換函數進行操作,我們可以利用where來限制是替換指定內容還是替換所有內容,下面一起來看看相關教程。

replace替換

mysql中replace函數直接替換mysql數據庫中某字段中的特定字符串,不再需要自己寫函數去替換,用起來非常的方便。 mysql 替換函數replace()

replace

replace(str1, str2, str3): 在字串 str1 中,? str2 出??r,?⑵湟 str3 替代。

例子

 代碼如下 復制代碼  
UPDATE `table_name` SET `field_name` = replace (`field_name`,'from_str','to_str') WHERE `field_name` LIKE '%from_str%'

 
說明:
table_name —— 表的名字
field_name —— 字段名
from_str —— 需要替換的字符串
to_str —— 替換成的字符串

例如:

mysql替換表的字段裡面內容,如例子:

 代碼如下 復制代碼

mysql> select id,type from items limit 10;
+--------+--------+
| id     | type   |
+--------+--------+
|   0001 | 780000 |
|   0002 | 780000 |
|   0003 | 780000 |
|   0004 | 780000 |
|   0005 | 780000 |
| 150419 | 780000 |
| 150420 | 780000 |
| 150421 | 780000 |
| 150422 | 780000 |
| 150423 | 780000 |
+--------+--------+

把type字段中的“78”改成“79” 用replace函數
 

sql如下:

 代碼如下 復制代碼

mysql> update items set type=replace(type,'79','78');

Query OK, 17536 rows affected (0.72 sec)
Rows matched: 17536  Changed: 17536  Warnings: 0

再查詢:

 代碼如下 復制代碼

mysql> select id,type from items limit 10;
+--------+--------+
| id     | type   | www.111cn.net
+--------+--------+
|   0001 | 790000 |
|   0002 | 790000 |
|   0003 | 790000 |
|   0004 | 790000 |
|   0005 | 790000 |
| 150419 | 790000 |
| 150420 | 790000 |
| 150421 | 790000 |
| 150422 | 790000 |
| 150423 | 790000 |
+--------+--------+
10 rows in set (0.00 sec)

由查詢結果到,數據已經更新成功

正則替換

locate:

LOCATE(substr,str)
POSITION(substr IN str)
返回子串 substr 在字符串 str 中第一次出現的位置。如果子串 substr 在 str 中不存在,返回值為 0:

substring

SUBSTR(str,pos,len): 由<str>中的第<pos>位置開始,選出接下去的<len>個字元。

首先描述一下,我遇到的問題:

以下是數據庫中的一個表mt2:
+----+------------------------------------------+
| id | name                                     |
+----+------------------------------------------+
|  1 | sdfsf<contact>beijing</contact>sldjfsld  |
|  2 | sdfsf<contact>shanghai</contact>sldjfsld |
|  3 | sdfsf<contact>jn</contact>sldjfsld       |
|  4 | sdfsf<contact>qd</contact>sldjfsld       |
+----+------------------------------------------+
遇到的要求是:將該表中<contact>到</contact>的內容刪除。
眾所周知,replace函數是不支持正則表達式的,所以只能采用其他的方法處理。
於是,我是使用了下面的sql語句:
Sql代碼 

 代碼如下 復制代碼 update mt2 set name = replace(name, substring(name, locate('<contact>', name),locate('</contact>', name)-locate('<contact>'+10, name)),''); 

問題解決了。
結果:
+----+-------------------+
| id | name              |
+----+-------------------+
|  1 | sdfsfactsldjfsld |
|  2 | sdfsfactsldjfsld |
|  3 | sdfsfactsldjfsld |
|  4 | sdfsfactsldjfsld |
+----+-------------------+

 

copyright © 萬盛學電腦網 all rights reserved