[問題] RODBC做sqlQuery時,時間條件的設定

看板R_Language作者 (小武)時間8年前 (2017/04/14 17:42), 編輯推噓1(1021)
留言22則, 5人參與, 最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.53.249 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1492162948.A.C39.html

04/14 18:12, , 1F
看你的寫法應該是要先把SQL語句組好吧,請用pase/pas
04/14 18:12, 1F

04/14 18:12, , 2F
te0將字串組好
04/14 18:12, 2F

04/14 20:19, , 3F
請想辦法用sql解掉,例如設個sql的變數是上個月的year mo
04/14 20:19, 3F

04/14 20:19, , 4F
nth,再比對
04/14 20:19, 4F

04/14 20:20, , 5F
這問題和r沒什麼關係,除非你直接倒出近兩個月資料,再到
04/14 20:20, 5F

04/14 20:20, , 6F
r裡篩選
04/14 20:20, 6F

04/14 22:01, , 7F
要抓上個月,年份也要考慮吧,你的ACTDATE欄位
04/14 22:01, 7F

04/14 22:01, , 8F
應該是datetime格式吧
04/14 22:01, 8F

04/14 22:02, , 9F
x<-unlist(strsplit(as.character(Sys.Date()),"-"))
04/14 22:02, 9F

04/14 22:02, , 10F
query_str <- paste0('SELECT ACTDATE,SECTOR,STD,ST
04/14 22:02, 10F

04/14 22:03, , 11F
A FROM TABLE where YEAR(ACTDATE) = ', x[1], ' and
04/14 22:03, 11F

04/14 22:03, , 12F
MONTH(ACTDATE) = ', x[2]-1)
04/14 22:03, 12F

04/14 22:03, , 13F
Oracle資料庫推薦用ROracle 只是要自己編譯而已
04/14 22:03, 13F

04/14 22:04, , 14F
sqlQuery(conn, query_str)
04/14 22:04, 14F

04/14 22:04, , 15F
但是用起來方便很多,而且Oracle宣稱快7X
04/14 22:04, 15F

04/14 22:04, , 16F
04/14 22:04, 16F

04/14 22:10, , 17F
我這樣寫很cheap,遇到一月會有問題。應該是要轉成
04/14 22:10, 17F

04/14 22:12, , 18F
時間格式,正確減去一個月才是
04/14 22:12, 18F

04/14 22:14, , 19F
樓上 直接用trunc(ACTDATE, 'MM')就好
04/14 22:14, 19F

04/14 22:14, , 20F
跟 trunc(SYSDATE, 'MM')
04/14 22:14, 20F

04/14 22:15, , 21F
謝謝天神
04/14 22:15, 21F

04/15 09:10, , 22F
感謝諸位大神 我趕快來試試
04/15 09:10, 22F
文章代碼(AID): #1Oy9c4mv (R_Language)
文章代碼(AID): #1Oy9c4mv (R_Language)