R中的动态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

我正在使用R和postgres包尝试一些动态SQL查询,以连接到我的数据库

不幸的是,如果执行以下语句,我会得到一个空数据帧:

    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
}