楼主: wormcocoon
3527 1

[程序分享] 在R语言中使用sqlQuery函数提取SQL Server数据时使用参数 [推广有奖]

  • 0关注
  • 1粉丝

高中生

50%

还不是VIP/贵宾

-

威望
0
论坛币
218 个
通用积分
38.1983
学术水平
4 点
热心指数
4 点
信用等级
3 点
经验
197 点
帖子
10
精华
0
在线时间
49 小时
注册时间
2006-3-26
最后登录
2024-3-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
这应该算是一个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


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

二维码

扫码加我 拉你入群

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

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

关键词:Server Serve Query sql Ver

沙发
hifinecon 发表于 2018-9-8 08:58:36 来自手机 |只看作者 |坛友微信交流群
wormcocoon 发表于 2018-9-7 23:18
这应该算是一个R语言编程中的基本操作,但本人正好这几天用到,在网络上查找了一下,有一些答案,但其中有的 ...
thank LZ for your kindness

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 06:11