R中的动态SQL查询(其中)
我正在使用R和postgres包尝试一些动态SQL查询,以连接到我的数据库 不幸的是,如果执行以下语句,我会得到一个空数据帧:R中的动态SQL查询(其中),sql,r,postgresql,dynamic-sql,Sql,R,Postgresql,Dynamic Sql,我正在使用R和postgres包尝试一些动态SQL查询,以连接到我的数据库 不幸的是,如果执行以下语句,我会得到一个空数据帧: x <- "Mean" query1 <- dbGetQuery(con, statement = paste( "SELECT *", "FROM name", "WHERE statistic = '",x,"'")) x问题问题可能是Mean周围有空格: x <- "Mean" s <- paste( "SELEC
x <- "Mean"
query1 <- dbGetQuery(con, statement = paste(
"SELECT *",
"FROM name",
"WHERE statistic = '",x,"'"))
x问题问题可能是Mean
周围有空格:
x <- "Mean"
s <- paste(
"SELECT *",
"FROM name",
"WHERE statistic = '",x,"'")
更正版本改为尝试:
s <- sprintf("select * from name where statistic = '%s'", x)
gsubfn您也可以尝试以下方法:
library(gsubfn)
fn$dbGetQuery(con, "SELECT *
FROM name
WHERE statistic = '$x'")
试试这个:
require(stringi)
stri_paste("SELECT * ",
"FROM name ",
"WHERE statistic = '",x,"'",collapse="")
## [1] "SELECT * FROM name WHERE statistic = 'Mean'"
或者使用连接运算符%%++
"SELECT * FROM name WHERE statistic ='" %+% x %+% "'"
## [1] "SELECT * FROM name WHERE statistic ='mean'"
您应该使用paste0
而不是产生错误结果的paste
或效率稍低的paste(…,collapse='')
(请参见?paste0
或)
也应考虑在分离变量中准备SQL语句。通过这种方式,您可以随时轻松地检查正在生成的SQL
我会用这个(我一直在用这个):
然后我可以简单地使用get_statistic('Mean',debug=TRUE)
,我会立即看到生成的SQL是否真的是我所期望的。啊!我没想到!你知道我如何删除空格吗?带有“stringi”包的解决方案对我很有用!非常感谢。
require(stringi)
stri_paste("SELECT * ",
"FROM name ",
"WHERE statistic = '",x,"'",collapse="")
## [1] "SELECT * FROM name WHERE statistic = 'Mean'"
"SELECT * FROM name WHERE statistic ='" %+% x %+% "'"
## [1] "SELECT * FROM name WHERE statistic ='mean'"
x <- "Mean"
sql <- paste0("select * from name where statistic='", x, "'")
# print(sql)
query1 <- dbGetQuery(con, sql)
function get_statistic(x=NA, debug=FALSE) {
sql <- paste0("select * from name where statistic='", x, "'")
if(debug) print(sql)
query1 <- dbGetQuery(con, sql)
query1
}