作者giock18 (小武)
看板R_Language
標題[問題] RODBC做sqlQuery時,時間條件的設定
時間Fri Apr 14 17:42:26 2017
[問題類型]:
程式諮詢(我想用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://webptt.com/m.aspx?n=bbs/R_Language/M.1492162948.A.C39.html
1F:→ carl090105: 看你的寫法應該是要先把SQL語句組好吧,請用pase/pas 04/14 18:12
2F:→ carl090105: te0將字串組好 04/14 18:12
3F:→ obarisk: 請想辦法用sql解掉,例如設個sql的變數是上個月的year mo 04/14 20:19
4F:→ obarisk: nth,再比對 04/14 20:19
5F:→ obarisk: 這問題和r沒什麼關係,除非你直接倒出近兩個月資料,再到 04/14 20:20
6F:→ obarisk: r裡篩選 04/14 20:20
7F:推 bluecadence: 要抓上個月,年份也要考慮吧,你的ACTDATE欄位 04/14 22:01
8F:→ bluecadence: 應該是datetime格式吧 04/14 22:01
9F:→ bluecadence: x<-unlist(strsplit(as.character(Sys.Date()),"-")) 04/14 22:02
10F:→ bluecadence: query_str <- paste0('SELECT ACTDATE,SECTOR,STD,ST 04/14 22:02
11F:→ bluecadence: A FROM TABLE where YEAR(ACTDATE) = ', x[1], ' and 04/14 22:03
12F:→ bluecadence: MONTH(ACTDATE) = ', x[2]-1) 04/14 22:03
13F:→ celestialgod: Oracle資料庫推薦用ROracle 只是要自己編譯而已 04/14 22:03
14F:→ bluecadence: sqlQuery(conn, query_str) 04/14 22:04
15F:→ celestialgod: 但是用起來方便很多,而且Oracle宣稱快7X 04/14 22:04
16F:→ celestialgod: 倍 04/14 22:04
17F:→ bluecadence: 我這樣寫很cheap,遇到一月會有問題。應該是要轉成 04/14 22:10
18F:→ bluecadence: 時間格式,正確減去一個月才是 04/14 22:12
19F:→ celestialgod: 樓上 直接用trunc(ACTDATE, 'MM')就好 04/14 22:14
20F:→ celestialgod: 跟 trunc(SYSDATE, 'MM') 04/14 22:14
21F:→ bluecadence: 謝謝天神 04/14 22:15
22F:→ giock18: 感謝諸位大神 我趕快來試試 04/15 09:10