[問題] 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