在工作中经常会对手上的数据进行二次处理,今天我就遇到一个问题。经理把一个excle表交给我让我把数据放到数据库里面,要求拆分多选字段并把拆分后的字段存到新的表中。刚加班完成任务,趁热打铁,写在博客里一是供自己以后使用,二是希望有需要的朋友可以借鉴。
1、把excel倒入mysql
第零步,准备好mysql图形化工具navicat,备份好excel文件(在操作有价值的文件的时候一定要先备份!切记!!)
第一步,把excel表中的字段列名改成英文(推荐 改成英文,貌似直接使用中文也是可以的);
第二步,在navicat中新建数据库,鼠标选中新建的数据库,右方的“导入向导”变成可点击状态;
第三步,点击导入向导,会弹出来一个窗口,选择excel文件(*.xls),此处你也可以根据你数据源的类型选择相应的选项,下一步;
第四步,选择数据源文件,选择表,excel中默认会有若干sheet,选择数据源所在的sheet,下一步;
第五步,选择excle文件中文件开始的位置,这里需要填入“栏目名行”和“第一个数据行”即可,建议事前处理一下excel文件,删除无关数据
第六步,勾选新建表,下一步,
第七步,选择列,修改数据类型,持续下一步,即可完成导入。
2、去掉数据库字段中的空格
update set 字段=replace(字段,' ','');
3、去除数据库字段末尾的标点
update 表 set 字段=left(字段,char_length(字段)-1) where right(字段,1)=',';
4、拆分数据库字段,插入新的表中
分别直接运行前两个函数,修改第三个函数的表名和字段顺序即可
函数1:
DELIMITER $$
DROP FUNCTION IF EXISTS `func_get_split_string`$$
CREATE FUNCTION `func_get_split_string`(
f_string VARCHAR(255),f_delimiter VARCHAR(5),f_order INT) RETURNS VARCHAR(255) CHARSET utf8
BEGIN
DECLARE result VARCHAR(255) DEFAULT '';
SET result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(f_string,f_delimiter,f_order)),f_delimiter,1));
RETURN result;
END$$
DELIMITER ;
函数段2:
DELIMITER $$
DROP FUNCTION IF EXISTS `func_get_split_string_total`$$
CREATE FUNCTION `func_get_split_string_total`(
f_string VARCHAR(255),f_delimiter VARCHAR(5) ) RETURNS INT(11)
BEGIN
RETURN 1+(LENGTH(f_string) - LENGTH(REPLACE(f_string,f_delimiter,'')));
END$$
DELIMITER ;
函数3:
DELIMITER $$
DROP FUNCTION IF EXISTS `func_split_string`$$
CREATE FUNCTION `func_split_string`(v_desc VARCHAR(100),v_str VARCHAR(100)) RETURNS VARCHAR(100) CHARSET utf8
BEGIN
DECLARE i INT(4);
DECLARE splitValue VARCHAR(100);
DECLARE returnStr VARCHAR(100);
SET i = 1;
IF(v_str IS NULL OR LENGTH(v_str)=0)
THEN
RETURN 'error';
ELSE
WHILE i<=func_get_split_string_total(v_str,';')
DO
INSERT INTO `tools`(uid,`name`) VALUES (v_desc,func_get_split_string(v_str,';',i));
SET i = i+1;
END WHILE;
RETURN 'success';
END IF;
END$$
DELIMITER ;
修改函数3中`tools`(uid,`name`) ,成被插入表名,和对应字段。
最后一步,调用函数,把数据插入新表中
执行sql: select func_split_string(id,name)result from sheet;
刷新数据库,数据就成功从插入到新表中