全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3804 1
2018-09-07
这应该算是一个R语言编程中的基本操作,但本人正好这几天用到,在网络上查找了一下,有一些答案,但其中有的靠谱,有的没有试验成功,而一些靠谱的解决方案我觉得说的不够透彻,举例不够简明。在大数据流行的今天,可能很多同学会遇到相同的情境,故发此贴以资参考。


R语言版本 3.4.3
SQL版本   2014
样例库:已导入SQL的上市公司资产负债表
数据库链接方式: RODBC包+DSN句柄设置
操作目的:提取某期的全市场资产负债表


首先说基本原理。个人体会,sqlQuery()函数有两个主要参数,一个是channel,它是R语言与SQL数据库的链接,这个由之前的odbcConnect建立,本例中采用的是事先在“控制面板-管理工具-数据源(ODBC)”中预先设定的相关数据库句柄加以引用;另一个是query,其实它就是一个字符串,而这个字符串传递到SQL中就应该是一条SQL可以正常理解的SQL语句,所以它一定要符合SQL的语法规则,但正因为它必须是一个整个的字符串,所以想将变量加入其中且清晰明了,个人以为还是在之前加工这个字符串比较合适,网上很多例子是直接将字符串的加工过程写入了sqlQuery语句,当然可行,但对初次接触者可能看得有点晕,其实也减少了程序的可读性,我认为。


其次,有一个例子说明一下这个过程,不写循环了,简单的就是用变量调取2016年年报,即上报时间(Accper)为2016-12-31的全市场资产负债表。程序如下:


> x1 <- 2016  #这个可以是逐渐递增或递减的变量
> cx1 <- as.character(x1)  #转换为字符型变量  
> dd <- c("-12-31","-03-31","-06-30","-09-30")  #一年四期报表的月日,可以通过下表循环
> cod <- paste("'", cx1, dd[1], "'", sep="")  #加工成时间条件
# ✲请特别注意上面语句,为符合SQL语法,要在加工的字符串两侧加上单引号“ ' ”✲
> cod
[1] "'2016-12-31'"
> cond <- paste("SELECT * FROM dbo.FS_Combas WHERE Accper =" ,cod, "AND Typrep='A' ",sep=" ")  
#加工整个query参数,即传递到SQL的提取语句,分隔符为空一格
> cond
[1] "SELECT * FROM dbo.FS_Combas WHERE Accper = '2016-12-31' AND Typrep='A' "
> library(RODBC) #调用RODBC包
> th <- odbcConnect("SQL01", "LENOVO-PC", "SQL登录密码")  #调用句柄与SQL数据库链接
> tt <- sqlQuery(th, cond) #提取数据
> dim(tt)
[1] 3218  129


最后,大家可以试一试,祝顺利。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-9-8 08:58:36
wormcocoon 发表于 2018-9-7 23:18
这应该算是一个R语言编程中的基本操作,但本人正好这几天用到,在网络上查找了一下,有一些答案,但其中有的 ...
thank LZ for your kindness
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群