Navicat实现excel数据入库
背景介绍
最近的需求是把excel模板中的数据导入到数据库对应表中,采用Navicat工具的导入功能,下面记录一下处理的过程,以备查看。
第一步、 数据库滤重
在用户表中,有部分人存在两条记录,最新的一条是有效数据,因此需要对人员表进行滤重操作。将滤重的结果存放到单独的一张表中,SQL语法:create table T1 as T2
// create table T1 AS T2 将T2的结果复制到新创建的T1表
CREATE table AA AS (
select t.a1,t.a2 from
(select a1 row_number() over (partition by a2 order by a1 desc) as rn from user ) t
where rn='1' group by t.a1)
第二步、 Navicat工具导入
运用Navicat打开数据库,在需要导入的表AB右键,选择–导入向导。
选择导入文件的格式,这里用的是excel格式的,选择xls格式,并点击下一步,选择需要导入的文件。
选择文件
选择数据库中需要导入的表,sheet签,点击选择下一步。
根据实际的需要,对应excel中列与数据库表的列,注意一定要对应准确,点击下一步。
设置好对应关系,一直下一步,点击开始,即利用Navicat工具开始了数据的入库。
第三步、数据处理
在数据导入的表AB中,发现有个身份证号SFZH字段的数据,有空格,需要进行去除空格。主要有两种方法:trim 和 replace。另 trim 函数 去掉两边的空格,ltrim 函数 去除左边的空格,rtrim 函数 去掉右边的空格。
// 第一种方法是trim函数
update user set sfzh =trim(sfzh);
//第二种方法是replace函数 替换
update user set sfzh =replace(sfzh, ' ', '');
想要对比两个表中的字段,SQL语法:select A.id,B.id from A,B
// 查看比较的语句
SELECT AB.ID,AB.SFZH,AA.ID,AA.SFZH
FROM AA,AB
WHERE AA.SFZH = AB.AA0177
第三步、数据处理
新导入表中有个字段,数据旧不准确,需要根据用户表AA来同步更新。oracle数据库的两个表更新字段语法:merge into
// ORACLE数据库更新的语句 merge into
merge into AB
using AA
on(AB.SFZH=AA.SFZH)
when matched then
update set AB.id = AA.id
//如果不存在的话 可以执行插入的操作
when not matched then insert (id,name) values(a1,a2);
注 : 从using 查询出来的结果逐条与on条件匹配,然后决定是update还是Insert。 当USING后面的sql没有查询到数据的时候,Merge Into语句是不会执行update和Insert操作的。
博客参考:
【1】https://blog.csdn.net/qq_43037983/article/details/81979120