mysql中自带有替换,去处首尾指定字符的函数,如trim
update test set name=trim(TRAILING '\r\n' FROM `name`);
其中 test为指定表,name为指定字段,'\r\n'为要去除的字符
您好,update mt2 set name = replace(name, substring(name, locate('<contact>', name),locate('</contact>', name)-locate('<contact>'+10, name)),'');
locate:
LOCATE(substr,str)
POSITION(substr IN str)
返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0:
substring
SUBSTR(str,pos,len): 由<str>中的第<pos>位置开始,选出接下去的<len>个字元。
replace
replace(str1, str2, str3): 在字串 str1 中,当 str2 出现时,将其以 str3 替代。
提供两个办法;
第一个是,笨办法,查找每个字段,看有单位的名称就修改一下。
第二个是,如果数据库数据量不大的话,可以使用mysqldump将数据导出到一个文本文件,然后使用文本文件的替换功能,将单位名称替换成正确的,然后再将数据导入数据库。
当然,也可以两个联合使用,比如先使用第二个方法中的mysqldump将数据导出,然后查找单位名称,看一共有多少处需要修改,然后再使用第一个方法中的update语句将字段值更新成新的单位名称。
import javaioIOException;
import javaioPrintWriter;
import javautilScanner;
public class Main {
public static void main(String[] args) throws IOException {
String target = "19216812";
String replace = "192168120";
String sourceFile = "C:/backupsql";
String outputFile = "C:/outputsql";
Scanner in = new Scanner(sourceFile);
PrintWriter pw = new PrintWriter(outputFile);
Systemoutprintln("文件已打开,替换中");
String regex = "\\Q" + target + "\\E(\\D|$)";
while (inhasNextLine()) {
String line = innextLine();
line = linereplaceAll(regex, replace);
pwprintln(line);
}
pwflush();
pwclose();
inclose();
Systemoutprintln("替换完毕,文件已保存。");
}
}
文件打不开,可以考虑使用程序进行替换呗。
这里加入了正则判断,以免192168120被替换成1921681200。
--test库是目标库(做替换前一定要做好备份)
--test2是名字数据集表所在的库
use test2
-- 建立测试表和数据
create table picName (oldname varchar(200),newname varchar(200));
insert into picName values ('JPG','tupianJPG'),('博客JPG','bokeJPG'),('网站JPG','wangzhanJPG');
commit;
-- 建立存储过程
drop procedure if exists dynamic_cursor;
CREATE PROCEDURE dynamic_cursor (IN db_name varchar(100))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_updateSql varchar(2000);
DECLARE times INT DEFAULT 0;
--
--
declare _err int default 0;
DECLARE cur CURSOR for( SELECT updateSql from picName_view);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION set _err=1;
DROP VIEW IF EXISTS picName_view;
SET @sqlstr = "CREATE VIEW picName_view as ";
-- SET @sqlstr = "";
SET @sqlstr =CONCAT(@sqlstr ,"select concat('update ",db_name,"`',atable_name,'` set ',acolumn_name,'=replace(',acolumn_name,',''',boldname,''',''',bnewname,''')') updateSql");
SET @sqlstr =CONCAT(@sqlstr ," from information_schema`COLUMNS` a ,picName b ");
SET @sqlstr =CONCAT(@sqlstr ," where aTABLE_SCHEMA='",db_name,"' and ");
SET @sqlstr =CONCAT(@sqlstr ," (aCOLUMN_type like '%char%' or aCOLUMN_type like '%text%' or aCOLUMN_type like '%blob%')");
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
OPEN cur;
f_loop:LOOP
FETCH cur INTO v_updateSql;
IF done THEN
LEAVE f_loop;
END IF;
set @updateSql=v_updateSql;
PREPARE stmt2 FROM @updateSql;
EXECUTE stmt2;
set times=times+1;
-- SELECT v_updateSql;
END LOOP f_loop;
CLOSE cur;
/ /
COMMIT;
select times;
END;
-- 测试
call dynamic_cursor('test');
以上就是关于如何替换MYSQL数据库文件全部的内容,包括:如何替换MYSQL数据库文件、mysql数据库中如何进行模糊替换字符串、求mysql如何替换数据库中所有表所有字段中的指定字符A为b等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)