用Excel公式构造一波SQL

Posted by Jeremy Song on 2021-08-05
Estimated Reading Time 3 Minutes
Words 911 In Total
Viewed Times

今天突然接到一个任务,要将Excel中的数据导入到数据库(MySQL)中去。打开Excel一看,好家伙2K+的数据,瞬间头大。当时就想着 “完了,看来得写一小段代码执行一下了”

还好,当时几个同事在一起,有个小伙伴给了个建议 “你可以用刚才转Excel中的时间为字符串的办法拼个SQL出来啊!”

听这么一说,看了一下Excel中数据结构,这完全可以嘛!那就动手写起来

准备工作

这里假设需要导入的表名为TBL_BUSSINESS_INFO,要需要的数据就用下面的格式,其中Excel中Time列的单元格格式为常规或者长日期、短日期、时间这三种中的一种:

将Excel中的日期格式化

因为我们这个更新的数据有时间类型的属性,而MySQL中可以执行类似UPDATE TBL_BUSSINESS_INFO SET time = "2021-04-09 23:01:05";这样的SQL语句来更新时间属性的列。所以,我们第一步就是需要将Excel中的时间进行格式化。

在Excel中格式化时间可以使用公式:

TEXT(value, format_text)

其中value表示待格式化的值,format_text表示格式的样式。

假如我们要将单元格A3的时间转换成年-月-日 时:分:秒的格式,则可以在一个空白单元格个中输入以下内容后按回车键:

1
=TEXT(A3,"yyyy-MM-dd HH:mm:ss")

键入上述公式后,还可以拖动自动填充柄来自动格式化紧邻的单元格,比如下面这样:

拼接多个单元格的内容

Excel中将多个内容拼接在一起的公式是CONCATENATE,其格式为:

CONCATENATE(text1, [text2], ...)

其中:这个公式是个可变长参数,也就是说你可以添加多个text到函数的参数中去

假如我们要将单元格B1、B2使用@符号连接起来,则可以在一个空白的单元格中输入以下内容后按回车键:

1
=CONCATENATE(B1, "@", B2)

同样,我们也可以拖动自动填充柄来自动完成紧邻单元格的连接

SQL组装

有了上面时间格式化和单元格内容拼接后,就可以很简单的拼接出我们需要的SQL了。以上面的表名和数据为例,我们可以使用如下的公式组合来拼接我们的SQL:

1
=CONCATENATE("UPDATE `TBL_BUSSINESS_INFO` SET `status` = ",E3," `time` = """,TEXT(D3,"yyyy-MM-dd HH:mm:ss"),""" WHERE `id` = ",C3,";")

解读一下。其中,TEXT函数是将日期格式化我们SQL允许的格式,CONCATENATE函数是SQL中的每个部分拼接起来。另外,“”两个双引号在公式中会转义成一个字符串,这也就是上面看起来那么多引号的原因。

使用自动填充完毕后,我们就可以复制这些SQL到一个纯文本文件中,这样一个SQL脚本就完成了。至于怎么执行,那就方法很多了。直接sqlplus执行,或使用你习惯的客户端工具都可以。

最后

大多数知识都是单点的,而且大多数人也都掌握了很多孤立的技能。如何能让这些单独的知识点和孤立的技能融合起来其实是一件很棒的事情。这个往大了说就是创新,往小里说会提升效率。

继续吧!骚年~ (●ˇ∀ˇ●)


欢迎关注我的公众号 须弥零一,跟我一起学习IT知识。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !