霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

mysql 使用 replace 批量替换内容

使用 replace 批量替换 MySQL  指定字段中的字符串是数据库 mysql 替换语句 部分替换应用中很常见的需求,但是有很多初学者在遇到这种需求时,通常都是用脚本来实现;其实,MySQL 内置的有批量替换语法,效率也会高很多。

批量替换的具体语法是:

UPDATE 表名
SET 指定字段 = replace(指定字段, ‘要替换的字符串’, ‘想要的字符串’)
WHERE 条件

如果你想把 article 表中 ID 小于5000的记录,content 字段中“解决”替换成“解放”,那么语法就是:

Code:

UPDATE article SET
content = replace(content, ‘解决’, ‘解放’)
WHERE ID<5000; 下面是一些关于 REPLACE 的 SQL 语句。 替换 cdb_pms 表的subject字段,将“Welcome to” 替换为“欢迎光临”: UPDATE `cdb_pms` SET `subject` = REPLACE(`subject`, ‘Welcome to’, ‘欢迎光临’) WHERE INSTR(`subject`,’Welcome to’) > 0

替换cdb_posts表的message字段,将“viewthread.php?tid=3989”替换成“viewthread.php?tid=16546”:

UPDATE `cdb_posts`
SET `message`= REPLACE(`message`, ‘viewthread.php?tid=3989′, ‘viewthread.php?tid=16546′)
WHERE INSTR(`message`,’viewthread.php?tid=3989′) > 0 ;

删除所有的空格:

UPDATE `es_product` SET `pro_pub_time` = TRIM(`pro_pub_time`)

删除所有饱含'[‘或者’]’或者’.’的字符:

UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘[‘,”) WHERE INSTR(`pro_pub_time`,'[‘) > 0
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘]’,”) WHERE INSTR(`pro_pub_time`,’]’) > 0
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘.’,’-‘) WHERE INSTR(`pro_pub_time`,’.’) > 0

替换所有含中文’-’的为英文’-‘:

UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘-’,’-‘) WHERE INSTR(`pro_pub_time`,’-’) > 0

将所有的年、月都替换成’-‘:

UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘年’,’-‘) WHERE INSTR(`pro_pub_time`,’年’) > 0
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘月’,’-‘) WHERE INSTR(`pro_pub_time`,’月’) > 0

将所有’2005-04-‘这种类型的替换成’2005-04-01’:

UPDATE `es_product` SET `pro_pub_time` = CONCAT(`pro_pub_time`, ’01’) WHERE SUBSTRING_INDEX( `pro_pub_time`, ‘-‘, -1) = ” AND LENGTH(`pro_pub_time`) > 0 AND LENGTH(`pro_pub_time`) > 5

将所有’2010-‘这种类型替换成’2010-01-01’:

UPDATE `es_product` SET `pro_pub_time` = CONCAT(`pro_pub_time`, ’01-01′) WHERE INSTR(`pro_pub_time`,’-‘) > 0 AND LENGTH(`pro_pub_time`) = 5

将所有饱含’-‘,但是位数小于8的改成追加’-01’:

UPDATE `es_product` SET `pro_pub_time` = CONCAT( `pro_pub_time`, ‘-01′) WHERE INSTR(`pro_pub_time`,’-‘) > 0 AND LENGTH(`pro_pub_time`) < 8

将所有’2010’这样的改成’2010-01-01’:

UPDATE `es_product` SET `pro_pub_time` = CONCAT(`pro_pub_time`,’-01-01′) WHERE INSTR(`pro_pub_time`,’-‘) = 0 AND LENGTH(`pro_pub_time`) = 4

最后将所有’2010-01-01’格式化成’2005年01月’:

UPDATE `es_product` SET `pro_pub_time` = DATE_FORMAT(`pro_pub_time`,’%Y年%m月’) WHERE INSTR(`pro_pub_time`,’-‘) > 0