如何在使用ODBC R访问ODBC时使用变量?

如何在使用ODBC R访问ODBC时使用变量?,r,R,我刚刚使用查询语句通过ODBC获取了数据 library(rJava) library(RJDBC) jdbcDriver <- JDBC(driverClass="oracle.jdbc.OracleDriver", classPath="C:/oracle/product/11.2.0/client_1/jdbc/lib/ojdbc6.jar") con <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@111.111.1.111:111

我刚刚使用查询语句通过
ODBC
获取了数据

library(rJava)
library(RJDBC)

jdbcDriver <- JDBC(driverClass="oracle.jdbc.OracleDriver", 
classPath="C:/oracle/product/11.2.0/client_1/jdbc/lib/ojdbc6.jar")
con <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@111.111.1.111:1111:FS05","11111","11111")
query <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%D3771%' AND TYPE_GB ='A2' 
AND END_YMD = '99999999'"

result <- dbGetQuery(con,query)
head(result)
库(rJava)
图书馆(RJDBC)

jdbcDriver捕获对象中查询的静态部分

query <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%random_box%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
然后可以循环执行这些语句,每次执行1个。或者,根据需要,您可以在每个结果之间使用“OR”关键字将所有结果放在一个SQL语句中

更新

您提到要使用变量而不是替换字符串中的关键字:

query.part1 <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%" 
query.part2 <- "%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"

paste0(query.part1, random_box, query.part2)

query.part1捕获对象中查询的静态部分

query <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%random_box%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
然后可以循环执行这些语句,每次执行1个。或者,根据需要,您可以在每个结果之间使用“OR”关键字将所有结果放在一个SQL语句中

更新

您提到要使用变量而不是替换字符串中的关键字:

query.part1 <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%" 
query.part2 <- "%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"

paste0(query.part1, random_box, query.part2)

query.part1抱歉误解了。我的意思是将变量传递给查询语句。看起来,如果有骰子,那么我们得到随机数1到6。所以我想把这个随机数放在空间'D3771'中。结果是随机数自动插入此空间。抱歉误解。我的意思是将变量传递给查询语句。看起来,如果有骰子,那么我们得到随机数1到6。所以我想把这个随机数放在空间'D3771'中。结果是随机数自动插入此空间。感谢回复。我相信这会有很大的帮助。但我有一个问题。没有办法在SQL语句中传递变量吗?@user13232877是的,如果您想使用变量而不是用
gsub
替换关键字,您可以使用
paste0
。我不确定这是否能带来任何改善,但这是一种选择。我可以把它作为一个例子,骰子解释只是一个比喻。在文档中,它有一个字符串,即文档名。所以我的最终目标是用这个名字搜索数据库。每天我都要处理至少70份文件。所以很难直接键入或使用子函数。这就是我问你如何传递变量的原因。因为如果可能的话,我只把变量“box”放在一行语句中我已经添加了一些例子来说明如何做同样的事情:把句子分成2个部分,中间有一个变量,而不是仅仅替换一个关键字(不管什么原因),以及如何在1个语句中使用<代码>或和<代码>这回答了问题吗?太棒了。我真的对结果感到惊讶。真诚地感谢您,它工作得很好谢谢您的回复。我相信这会有很大的帮助。但我有一个问题。没有办法在SQL语句中传递变量吗?@user13232877是的,如果您想使用变量而不是用
gsub
替换关键字,您可以使用
paste0
。我不确定这是否能带来任何改善,但这是一种选择。我可以把它作为一个例子,骰子解释只是一个比喻。在文档中,它有一个字符串,即文档名。所以我的最终目标是用这个名字搜索数据库。每天我都要处理至少70份文件。所以很难直接键入或使用子函数。这就是我问你如何传递变量的原因。因为如果可能的话,我只把变量“box”放在一行语句中我已经添加了一些例子来说明如何做同样的事情:把句子分成2个部分,中间有一个变量,而不是仅仅替换一个关键字(不管什么原因),以及如何在1个语句中使用<代码>或和<代码>这回答了问题吗?太棒了。我真的对结果感到惊讶。真的谢谢你,它真的很好用
 [1] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C1866%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
 [2] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A3236%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
 [3] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C8977%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
 [4] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A735%' AND TYPE_GB ='A2' AND END_YMD = '99999999'" 
 [5] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C2102%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
 [6] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A3169%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
 [7] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C2358%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
 [8] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A6846%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
 [9] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C5268%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[10] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A4433%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
query.part1 <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%" 
query.part2 <- "%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"

paste0(query.part1, random_box, query.part2)
value <- capture.output(cat(paste0(random_box, "%' OR '%")))

all.in.one <- paste0(query.part1, 
                     value, 
                     query.part2)

gsub("OR '%%'", "", all.in.one)