使用df列中的值来创建SQL查询

时间:2014-10-29 20:42:14

标签: r sqldf

我想从数据框中获取值并将它们粘贴到可用作sql查询的文本字符串中。在SAS我会这样做

proc sql noprint; Select Names into :names separated by ", " from df; quit;

这将创建一个存储所有名称的变量和名称。喜欢:Id,Name,Account。我想在R中做同样的事情,但不知道如何。我可以创建一个名称用逗号分隔的向量,每个用引号括起来,我可以使用noquote函数取出引号并将它们放在向量中,但是我无法在另一个粘贴语句中获取元素来添加&# 34; SELECT"和FROM。我无法将其全部粘贴。有没有办法在Column上提取值并创建一个可以在R中用作SQL查询的文本字符串?这是我在R中尝试的:

name = c("Id", "IsDeleted", "Name", "Credit__Loan__c")
label = c("Record Id", "Deleted", "ID", "Loan")
df = data.frame(name, label)
names(df) <- c("name", "label")

as.query.fields = noquote(paste(df$name, collaspe=", "))
as.query.final <- paste("SELECT " , noquote(paste(df$name, collaspe=", ")), " id FROM Credit_Amortization_Schedule__c")

2 个答案:

答案 0 :(得分:2)

data(iris)
colnames(iris)
a <- noquote(paste(colnames(iris), collaspe=", "))
as.query.final <- cat("SELECT " , a, " id FROM Credit_Amortization_Schedule__c")

结果是:

SELECT  Sepal.Length ,  Sepal.Width ,  Petal.Length ,  Petal.Width ,  Species ,   id FROM Credit_Amortization_Schedule__c

然后您可以像这样使用SQL:

require(RODBC)
result <- sqlQuery(db, as.query.final)

其中db是您的数据库连接

或者,因为我现在看到了您的sqldf标记,如果您想使用sqldf它只是:

sqldf(as.query.final)

答案 1 :(得分:0)

gsubfn包支持字符串插值:

library(gsubfn)

Names <- toString( sprintf("%s '%s'", df$name, df$label) )
fn$identity("select $Names from myTable")

,并提供:

[1] "select Id 'Record Id', IsDeleted 'Deleted', Name 'ID', Credit__Loan__c 'Loan' from myTable"

以下是一些其他示例:SO example 1SO example 2