2017-12-15 14 views
0

R에서 내 sql 데이터베이스에 액세스하기 위해 RODBC 패키지를 사용하고 있습니다. R에서 sql로 벡터를 벡터로 전달하는 방법에 대한 유용한 정보를 찾을 수 없었습니다.R 벡터에서 SQL 쿼리로 전달

id <- ('00003', '00100') 
    query <- sqlQuery(channel = channel, query = "select * 
        from prod_cust_vw.store_dim 
        where store_num in id") 

나는 하드 코딩보다는 sql에 id 벡터를 전달하고 싶습니다.

+1

은'paste'를 사용하거나'sprintf' i.e.e'붙여 넣기 – akrun

답변

4

1) sprintf와 SQL 문에 포함 적합한 문자열로 id 변환 한 후 sprintf?sprintf를 참조하여 SQL 문자열에 삽입합니다. $ FN

id <- c('00003', '00100') 
idString <- toString(sprintf("'%s'", id)) # "'00003', '00100'" 
sql_fmt <- "select * from prod_cust_vw.store_dim where store_num in (%s)" 
sql <- sprintf(sql_fmt, idString) 
sql 
## [1] "select * from prod_cust_vw.store_dim where store_num in ('00003', '00100')" 

2) 또는 gsubfn 패키지 fn$를 사용합니다. sqlQuery (또는 임의의 R 함수)을 fn$으로 시작하면 실제 인수가 검색되고 $ 변수가 해당 내용으로 바뀝니다. 여기서 변수 이름에는 문자와 숫자 만 포함해야합니다. ?fn을 참조하십시오.

library(gsubfn) 

fn$sqlQuery(channel = channel, query = "select * 
     from prod_cust_vw.store_dim 
     where store_num in ($idString)") 
0

나는 이렇게하고있다. `(ID를 "여기서 store_num에 prod_cust_vw.store_dim SELECT * FROM")

library("RODBC") 


dbhandle <- odbcDriverConnect('driver={SQL Server};server=Your_Server_Name;database=Your_Database_Name;trusted_connection=true') 

currTableSQL<-paste("SELECT * FROM Your_Table",sep="") 

currTableDF<-sqlQuery(dbhandle,currTableSQL)