0

拳头我正在执行以下 R 命令,它从 postgresql 返回一组记录

col_qry <- paste("select column_name from table1",sep="")
rs_col <- dbSendQuery(r,col_qry)
temp_list <- fetch(rs_col,n=-1)

使用 R 打印时,返回的数据显示为以下格式print(temp_list)

          column_name
1         col1
2         col2
3         col3
4         col4

现在基于这个返回的数据,我想生成另一个应该是这样的 sql 语句

copy (select "col1","col2","col3","col4" from table2 )

当我这样做时

tmp_cp <- paste("copy (select ",col_list,",","from table2",sep="")

然后打印这个tmp_cp而不是一个copy语句打印一堆copy语句,一个用于select中的每个列名,如下所示

copy (select col1 from table2 )
copy (select col2 from table2 )
copy (select col3 from table2 )
copy (select col4 from table2 )
and so on...

我只想要一个copy将所有列名一起提到的语句,每个都"",. 我怎样才能做到这一点?

更新:当我使用这些语句时

col_list <- toString(shQuote(temp_list$column_name))

tmp_cp <- paste("copy (select ",col_list,",","from table2",sep="")

然后只生成一个语句,但列名在单引号内,而不是像这样的双引号:

copy (select 'col1','col2','col3','col4' from table2 )

注意:我在上面提到了 4 列,但并不是只有 4 列。列可以很多。为了解释,我显示了 4 列

4

2 回答 2

1

尝试这个:

library(gsubfn)
sql <- fn$identity(
  "select `toString(shQuote(temp_list$column_name, 'cmd'))` from table2"
)

给予:

> sql
[1] "select \"col1\", \"col2\", \"col3\", \"col4\" from table2"

> cat(sql, "\n")
select "col1", "col2", "col3", "col4" from table2 

这也可以,并且不需要任何软件包:

sprintf("select %s from table2", 
   toString(shQuote(temp_list$column_name, 'cmd')))
于 2014-07-22T22:08:20.807 回答
0

嵌套pastecollapse参数中:

paste("copy (select", paste(cols, collapse=", "), "from table2)")

如果您想要引用的列名:

paste("copy (select", paste(shQuote(cols, "cmd"), collapse=", "), "from table2)")
于 2014-07-23T00:51:32.850 回答