`

使用Excel拼装Sql语句将数据导入数据库

 
阅读更多

其实这是一种很笨拙的方法,不过用这种方法可以节省开发一个导入功能的时间。
大概的原理就是利用excel生成sql语句,然后再到数据库中运行。利用这种方法可以将excel数据导入到各种类型的数据库中。

 

下面我们以导入mysql为例,说明一下如何使用这种方法。

 

一、假设你的表格有A、B、C三列数据,希望导入到你的数据库中表格table,对应的字段分别是field1、field2、field3

二、在你的表格中增加一列,利用excel的公式自动生成sql语句:
1、增加一列(假设是D列)
2、在第一行的D列,就是D1中输入公式:
=CONCATENATE("insert into table (field1,field2,field3) values ('",A1,"','",B1,"','",C1,"');")
3、此时D1已经生成了如下的sql语句:
insert into table (field1,field2,field3) values ('a','11','33');
4、将D1的公式复制到所有行的D列(就是用鼠标点住D1单元格的右下角一直拖拽下去就会自动生成了)
5、此时D列已经生成了所有的sql语句
6、把D列复制到一个纯文本文件中,假设为sql.txt

 

当拿到一个Excel的时候需要将这里面的数据插入到数据库里面,该怎么办,除了使用SSIS数据导入之外还可以使用Excel中的CONCATENATE函数,这个有点技巧,第一次使用的时候可能会让你有点困惑。如果我们理解这个函数的定义就不难了。

 

定义

CONCATENATE 函数可将最多 255 个文本字符串合并为一个文本字符串。联接项可以是文本、数字、单元格引用或这些项的组合。例如,如果您的工作表的单元格 A1 中包含某个人的名字,单元格 B1 中包含这个人的姓氏,那么,您可以通过使用以下公式将这两个值合并到另一个单元格中:=CONCATENATE(A1," ",B1)此示例中的第二个参数 (" ") 为空格字符。您必须将希望在结果中显示的任意空格或标点符号指定为使用双引号括起来的参数。

 

语法
CONCATENATE(text1, [text2], ...)CONCATENATE 函数语法具有下列参数(参数为:操作、事件、方法、属性、函数或过程提供信息的值。):
Text1 必需。要连接的第一个文本项。
Text2, ... 可选。其他文本项,最多为 255 项。项与项之间必须用逗号隔开。


注释: 您也可以使用连接符号 (&) 计算运算符代替CONCATENATE 函数来连接文本项。例如,=A1 & B1 返回相同的值为=CONCATENATE(A1, B1)

 

举例

excel内容如下:

nsrbm     mc     gly
001        a1     小李
002        a2     小王
003        a3     小三
004        a4     小四

首先先看下面表达式:

=CONCATENATE("insert into DaoRu(nsrbm,mc,gly) values('",A2,"','",B2,"','",C2,"');")

这个首选这表达式前面有一个“=”,然后表达式名称CONCATENATE(),最后是它的参数,这部分是最复杂的了。

第一个参数:"insert into DaoRu(nsrbm,mc,gly) values('"      这是一个字符串

第二个参数:A2                                                               这是一个单元格引用

第三个参数:"','"                                                              这是一个字符串

第四个参数:B2                                                               这是一个单元格引用

第五个参数:"','"                                                              这是一个字符串

第六个参数:C2                                                               这是一个单元格引用

第七个参数:"');"                                                             这是一个字符串

最后生成的语句如下:

insert into DaoRu(nsrbm,mc,gly) values('001','a1','小李');
insert into DaoRu(nsrbm,mc,gly) values('002','a2','小王');
insert into DaoRu(nsrbm,mc,gly) values('003','a3','小三');
insert into DaoRu(nsrbm,mc,gly) values('004','a4','小四');

 

=CONCATENATE("INSERT INTO item(Groupid,Itemname) VALUES('",A3,"','",B3&"-"&C3&"-"&D3,"');")

把A3,B3,C3,D3用“-”连接起来然后写入itemname

=B3&"-"&C3&"-"&D3

把A3,B3,C3,D3用“-”连接起来生成另外一列

 

demo:

=CONCATENATE("insert into duty_recored(CHANNEL,DUTY_TIME,PERSON_ID,USER_NAME,PERSON_SEX,QUENE) values ('",A1,"','",B1,"','",C1,"','",D1,"','",E1,"','",F1,"');")

=CONCATENATE("insert into duty_recored(CHANNEL,DUTY_TIME,PERSON_ID,USER_NAME,PERSON_SEX,QUENE) values ('",A1,"',date_format('"&IF(ISBLANK(B1),"",TEXT(B1,"yyyy-mm-dd hh:mm"))&"','%Y-%m-%d %H:%i'),'",C1,"','",D1,"','",E1,"','",F1,"');")


=CONCATENATE("insert into asset(assetid,assetuid,treeasset,sendersysid,assetnum,description,classstructureid,eq10,assettype,ifivoltage,measureunit,quantity,manufacturer,newmanufacturer,supplier,custxh,custcccode,custccdate,oldguaranty,licenseplate,"&"custinstalldate,installdate,spatialcode,runcode,longitude,latitude,aboveheight,landform,eqoperatunit,eqadjpipeunit,custsbdepmt,custsbcrew,custsblead"&",Purchaseprice,Replacecost,Totalcost,ytdcost,budgetcost,isrunning,unchargedcost,totunchargedcost,totdowntime,changeby,changedate,orgid,siteid,langcode,invcost,children,"&"disabled,autowogen,mainthierchy,moved,hasld,islinear,returnedtovendor,tloampartition,plusciscontam,pluscisinhousecal,pluscismte,"&"pluscpmextdate,pluscsolution,iscalibration,virtualasset,rowstamp) values(assetseq.nextval,assetseq.nextval,"&RIGHT(A44479,1)&",'"&B44479&"','"&IF(ISBLANK(C44479),D44479,C44479)&"','"&E44479&"','"&F44479&"','"&G44479&"','"&H44479&"','"&I44479&"','"&J44479&"',1,'"&L44479&"','"&M44479&"','"&N44479&"','"&O44479&"','"&P44479&"',to_date('"&IF(ISBLANK(Q44479),"",TEXT(Q44479,"yyyy-mm-dd"))&"','yyyy-mm-dd'),'"&R44479&"','"&S44479&"',to_date('"&IF(ISBLANK(T44479),"",TEXT(T44479,"yyyy-mm-dd"))&"','yyyy-mm-dd'),to_date('"&IF(ISBLANK(U44479),"",TEXT(U44479,"yyyy-mm-dd"))&"','yyyy-mm-dd'),'"&V44479&"','"&W44479&"','"&X44479&"','"&Y44479&"','"&Z44479&"','"&AA44479&"','"&AB44479&"','"&AC44479&"','"&AD44479&"','"&AE44479&"','"&AF44479&"',0,0,0,0,0,1,0,0,0,'MAXADMIN',SYSDATE,'PGCS','XSZ','ZH',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,maxseq.nextval);")

 

=CONCATENATE("<",B2,">",C2,"</",B2,">")

分享到:
评论

相关推荐

    SQL语句拼装工具V2

    写java程序时用来拼装sql语句时使用的小工具,在.net 4.0环境下运行。 跟前一版本比较,增加了前缀和空格位置的自定义,并增加了一个配置文件,保存自定义项 例如将 select a, b, c from abc where a like('3') ...

    SQL语句拼装工具

    写java程序时用来拼装sql语句时使用的小工具,在.net 4.0环境下运行。例如将 select a, b, c from abc where a like('3') 转换为: sql.append("select "); sql.append(" a, "); sql.append(" b, "); sql.append...

    泛型封装的sql语句

    灵活的运用范型对sql语句进行拼装,达到简洁sql语句的作用,让繁琐的sql语句见鬼去吧

    易语言SQL拼装1.1 链式编程, 拼装SQL方法

    于是决定用易语言模仿一个, 这个版本只支持 "生成拼装SQL", 下次准备结合ad0o对象. 允许直接操作数据库。制作这么一个东西的初衷是为了 "更快更高效的开发程序", 我们往往在SQL上耽搁了太多时间. 并不是它难. 而是...

    Java开发基于rmi的数据库中间件设计源码.zip

    Java开发基于rmi的数据库中间件设计源码。分布式对象技术课程实践:基于rmi的数据库中间件...根据表名自动获取数据类型,从而在拼装SQL语句时决定数值是否加单引号; 提供事务确认和回滚处理。 接口设计如下表所示:

    基于 RMI 技术的数据库操作中间件设计学生、教师消费记录管理系统【100011197】

    根据表名自动获取数据类型,从而在拼装 SQL 语句时决定数值是否加单引号; 提供事务确认和回滚处理。 ②Web 应用: 利用Web 技术构建一个学生、教师消费记录管理系统,通过系统可以: 学生、教师信息的查询、增加、...

    支持多数据库的ORM框架ef-orm.zip

    阅读推荐:第3、4章 特点二,将SQL的使用发挥到极致,解决SQL拼凑问题、数据库移植问题 大部分OLTP应用系统到最后都不免要使用SQL/JPQL,然而没有一个很好的方法解决SQL在多种数据库下兼容性的问题。 EF-ORM中...

    MySQL查询把多列返回结果集拼装成一个字段

    使用场景 mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级...

    数据库应用程序实用攻略

    永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。 3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4.不要把机密信息直接存放,加密或者...

    hibernate实现动态SQL查询

    hibernate实现动态SQL查询,通过XML配置SQL,FREEMARKER 解析,生成要执行的SQL

    基于java的企业级应用开发:动态SQL.ppt

    8.1 动态SQL中的元素 开发人员在使用JDBC或其他类似的框架进行数据库开发时,通常都要根据需求去手动拼装SQL,这是一个非常麻烦且痛苦的工作,而MyBatis提供的对SQL语句动态组装的功能,恰能很好的解决这一麻烦工作...

    易语言-易语言SQL拼装1.1 链式编程, 拼装SQL方法

    于是决定用易语言模仿一个, 这个版本只支持 "生成拼装SQL", 下次准备结合ad0o对象. 允许直接操作数据库 制作这么一个东西的初衷是为了 "更快更高效的开发程序", 我们往往在SQL上耽搁了太多时间. 并不是它难. 而是...

    mybatis的具体介绍.doc

    映射简单:MyBatis提供了简单的映射方式,可以将数据库表中的字段自动映射到Java对象的属性上,降低了数据转换的复杂性。 灵活性高:MyBatis支持动态SQL和存储过程,对于需要执行复杂查询的应用场景,提供了强大的...

    Oracle实现动态SQL的拼装要领

    虽说Oracle的动态SQL语句使用起来确实很方便,但是其拼装过程却太麻烦。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符,到了sql中又要使用to_date转成date类型和原字段再比较。 例如有这样...

    Android-GreenDao是AndroidORM(对象关系映射)框架

    GreenDao是Android ORM(对象关系映射)框架,简化对数据库的操作,不用开发者自己拼装sql语句,减少出错率。开发者只需对实体类实例进行操作即可达到操作数据库的目的。Demo的GreenDao版本为3.2,通过注解方式生成...

    使用Python构造hive insert语句说明

    我们可以先打印在hive命令行,然后使用脚本拼装成insert语句,进行数据构造。 手动copy到python脚本进行sql语句构造: def transformString(s): list_s = s.split('\t') print(len(list_s)) s_new = '' for item in...

    数据库连接后用户界面

    Sql注入:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻击方式就叫做sql注入,参考用户注册登录案例。

    仿valuelist式动态sql拼装

    NULL 博文链接:https://relive123-yahoo-com-cn.iteye.com/blog/848414

Global site tag (gtag.js) - Google Analytics