背景介绍

最近的需求是把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字段的数据,有空格,需要进行去除空格。主要有两种方法:trimreplace。另 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