`

使用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语句拼接工具,简化SQL语句拼写代码

    使用这样的工具或框架,开发者可以遵循面向对象的原则,将数据访问逻辑封装起来,避免在业务代码中混杂大量的字符串拼接,从而提升代码质量。同时,通过预编译和参数绑定,还可以有效地防止SQL注入攻击,增强系统的...

    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语句”。 首先,我们要理解泛型的概念。泛型是.NET框架中的一项重要特性,它允许在定义类、接口和方法时使用类型参数,从而创建可以应用...

    详解MyBatis直接执行SQL查询及数据批量插入

    在本文中,我们将深入探讨如何使用MyBatis直接执行SQL查询以及如何进行数据的批量插入。 **一、直接执行SQL查询** 在MyBatis中,你可以通过Mapper接口和XML配置文件来直接执行自定义的SQL查询。下面是一个简单的...

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

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

    java类实现导出各种数据库insert语句.pdf

    该方法通过连接数据库,执行查询语句,拼装 insert 语句,并将其导出到文件中。 数据库连接 在本文中,我们使用了 Java 的 JDBC API 来连接数据库。首先,我们需要导入相关的包,包括 `java.sql.Connection`、`...

    仿valuelist式动态sql拼装

    标题“仿valuelist式动态sql拼装”指的是在编程中实现类似MyBatis的`&lt;foreach&gt;`标签功能,用于动态地拼接SQL语句,尤其是处理列表参数时的插入、更新或查询操作。这种技术常见于Java后端开发,尤其是在使用ORM(对象...

    hibernate实现动态SQL查询

    在Hibernate中,我们可以创建自定义的SQL查询语句并将其配置在映射文件(.hbm.xml)中。这些自定义SQL可以在需要时动态调用,从而实现动态查询。例如,我们可以为一个实体类定义多个HQL或SQL查询,根据实际需要选择...

    分离valuelist的sql拼装

    总的来说,分离valuelist的SQL拼装是数据库编程中的常见任务,理解和掌握这一技巧对提高代码质量、保证数据安全以及提升开发效率都至关重要。通过选择合适的编程方法和利用现有的库或框架,我们可以更高效、安全地...

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

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

    spring+hibernate,自己封装了原生sql的处理,模仿mybatis使用

    而Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库操作,允许开发者通过Java对象来操作数据库,减少了对SQL的直接使用。 标题中的"spring+hibernate"表明这是一个将两者结合使用的项目。Spring和...

    SqlUtils工具类,Sql IN 条件拼接工具类

    这些方法通常会结合使用`StringBuilder`来构造SQL字符串,同时进行必要的边界条件检查,确保在空值或空集合时返回合理的SQL语句。 例如,如果要根据一个可能为空的`ids`列表构建一个`IN`查询,你可以这样做: ```...

    SQL查询语句的动态生成.pdf

    在设计动态生成的查询界面和语句功能时,需要考虑到SQL语句拼装、字段的输入输出、数据格式以及强制条件等因素。通过两张表的设计,可以实现数据的动态查询和数据输入输出的控制,而不需要修改柜面程序代码,从而...

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

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

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

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

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

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

    java导出oracle数据(单表)

    在本资源中,我们将讨论如何使用 Java 语言导出 Oracle 数据库中的单表数据。该资源提供了一个完整的示例代码,展示了如何使用 Java 语言连接 Oracle 数据库,执行导出操作,并处理可能出现的错误。 知识点 1:Java...

Global site tag (gtag.js) - Google Analytics