[问题] RODBC做sqlQuery时,时间条件的设定

楼主: giock18 (小武)   2017-04-14 17:42:26
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
我想使用R的RODBC跟ORACLE数据库相联,并且捞回上个月月份的资料。
在我的资料表表单中,有一栏ACTDATE记录时间,R读取时是POSIXct格式
假设我想抓上个月份的资料,我该怎么做?
[程式范例]:
程式不长我直接贴
Sys.setenv(TZ = "UTC") #设定时间
dataframe <- sqlQuery(conn, "SELECT ACTDATE,SECTOR,STD,STA
FROM TABLE
where months(ACTDATE) = months(Sys.Date())-1
Order by ACTDATE ")
感觉一定是怪怪的,但也不知该如何改
[环境叙述]:
sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 LC_CTYPE=Chinese
(Traditional)_Taiwan.950
[3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 LC_NUMERIC=C
[5] LC_TIME=Chinese (Traditional)_Taiwan.950
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] mail_1.0 xlsx_0.5.7 xlsxjars_0.6.1 rJava_0.9-8 RODBC_1.3-14
loaded via a namespace (and not attached):
[1] tools_3.3.3
[关键字]:
RODBC
作者: carl090105 (Jing)   2017-04-14 18:12:00
看你的写法应该是要先把SQL语句组好吧,请用pase/paste0将字串组好
作者: obarisk (OSWALT)   2017-04-14 20:19:00
请想办法用sql解掉,例如设个sql的变量是上个月的year month,再比对这问题和r没什么关系,除非你直接倒出近两个月资料,再到r里筛选
作者: bluecadence (Maxwell's demon)   2017-04-14 22:01:00
要抓上个月,年份也要考虑吧,你的ACTDATE字段应该是datetime格式吧x<-unlist(strsplit(as.character(Sys.Date()),"-"))query_str <- paste0('SELECT ACTDATE,SECTOR,STD,STA FROM TABLE where YEAR(ACTDATE) = ', x[1], ' andMONTH(ACTDATE) = ', x[2]-1)
作者: celestialgod (天)   2017-04-14 22:03:00
Oracle数据库推荐用ROracle 只是要自己编译而已
作者: bluecadence (Maxwell's demon)   2017-04-14 22:04:00
sqlQuery(conn, query_str)
作者: celestialgod (天)   2017-04-14 22:04:00
但是用起来方便很多,而且Oracle宣称快7X倍
作者: bluecadence (Maxwell's demon)   2017-04-14 22:10:00
我这样写很cheap,遇到一月会有问题。应该是要转成时间格式,正确减去一个月才是
作者: celestialgod (天)   2017-04-14 22:14:00
楼上 直接用trunc(ACTDATE, 'MM')就好跟 trunc(SYSDATE, 'MM')
作者: bluecadence (Maxwell's demon)   2017-04-14 22:15:00
谢谢天神
楼主: giock18 (小武)   2017-04-15 09:10:00
感谢诸位大神 我赶快来试试

Links booklink

Contact Us: admin [ a t ] ucptt.com