Open xinrong2019 opened 5 years ago
另一份总结:
1、在使用Excel的时候,我是个客户的角色,只要尽力精确自己的问题,在搜索引擎上都可以得到答案。
我想提醒自己的是:知道自己需要什么样的功能,越具体越好,把这个需求描述出来,再搜索。
思考这个需求的具体过程,让我感觉很好。
2、我处理的数据量是5200+条insert语句,大概25000+行原始语句。
如果使用程序,debug会方便,所以,对于数据量大的情况,中间执行哪一步出错了,是不方便调试的,使用程序更好
有一个需求,需要将一个系统的excel数据导入到我们的数据库中的某张表。
首先,确认对应关系
然后,拼接SQL
目标SQL是如下这种
可以用程序写个导入,不过Insert语句得写好,这个必须是第一步。
用程序写,得有一个模型类,字段就是表头,一一对应,然后使用jdbc批量执行insert语句。
但是,我利用的是Excel强大的处理能力。
使用Excel处理
首先,excel另存为格式,使用逗号分隔的csv格式,接着结合Excel函数做文本替换
需要在表格数据未拼接之前,将特殊字符转义替换
其他数据和符号替换
1、头部使用@@@,用于后续替换前缀
2、="@@@'"&A2&"',"
&是字符串拼接
文本使用双引号引起来
需要将日期使用TEXT函数进行文本格式化处理。
notepad++中替换,如果是要把目标文本替换成三行(多行),只会替换掉其中第一行,所以需要把三行并为一行替换。
3、="'"&B2&"',"
4、="to_date('"&TEXT(N2,"YYYY/MM/dd")&"', 'yyyy/mm/dd')"
5、在最后加上from dual;后缀
6、如何复制函数的内容: 复制,粘贴的时候选择粘贴值
复制到notepad++中做文本替换时:
7、&需要转义,需要将文本中的&替换为'||chr(38)||'拼接,最好在第一步做特殊字符替换
8、将多余的双引号去掉,采用替换为空的方式
需要不断测试:使用第一条sql在plsql中执行,查看是否执行成功
9、导入的时候,会出现有些字段长度不够,需要扩充长度
其他补充说明:
NAME? Excel中损坏的数据删除后者确认,否则影响替换。
总结:
我花了几个小时时间在测试excel函数和验证sql上,中间出了各种坑,还有自己的不小心,比如="to_date('"&TEXT(N2,"YYYY/MM/dd")&"', 'yyyy/mm/dd')"写成="to_date('"&TEXT(N2,"YYYY/MM/dd")&"' 'yyyy/mm/dd')"。
看出区别了吗,少个逗号。。。
有了上面的经验,如果下次再有这种情况,应该在半小时内可以搞完,工作量就是你得拼好第一条sql,后面都是直接执行