如何在for循环和insert语句中使用paste函数和引号

时间:2015-07-16 21:25:04

标签: mysql r for-loop quotes rmysql

通过 for循环 R语言,我尝试使用插入语句来保存表格中的行: 一行示例如下所示:

NUMPAT   NAME       FIRSTNAM     BIRTHDATE     SEX    DATPREL      ADICAP1   IDPAT   NUMERORUM 
 1       ELOSTE      JAMES      2003-09-27      1    2008-03-24    BHOTE4P1   468        2

我试图写的是:

 info<- paste("INSERT INTO tab_anapath_std1 VALUES (",matOp[i,1],", \",matOp[i,2],\",\",matOp[i,3], \",",matOp[i,4],",",matOp[i,5],",",matOp[i,6],",\",matOp[i,7],\",",matOp[i,8],",",matOp[i,9],")")
 sql_update_tbl_ds <- fn$dbSendQuery(dbconn, info)

我得到的输出是:

 NUMPAT   NAME       FIRSTNAM       BIRTHDATE     SEX    DATPREL      ADICAP1      IDPAT     NUMERORUM   
1    ,matOp[i,2],    ,matOp[i,3],    0000-00-00    1    0000-00-00   ,matOp[i,7],    468       2

我有一个真正的问题来管理引号;我甚至试图改变而没有成功; 我该怎么写呢?

2 个答案:

答案 0 :(得分:1)

如果您使用的是fn$,则无需使用pastefn$paste的替代方案。只需写出字符串,并在任何地方插入带有反引号的R代码R代码。以下是使用fn$使用内置BOD数据框的自包含示例。

library(sqldf)
matOp <- matrix(1:4, 1, 4)
i <- 1

sql <- "select * from BOD where Time = `matOp[i, 4]`"

fn$identity(sql)
## [1] "select * from BOD where Time = 4"

fn$sqldf(sql)
##   Time demand
## 1    4     16

答案 1 :(得分:0)

尝试使用info <- sprintf("INSERT INTO tab_anapath_std1 VALUES ('%s', '%s', '%s', '%d', '%s', '%s', '%d', '%d')", matOp[i, 1], matOp[i, 2], matOp[i, 3], matOp[i, 4], matOp[i, 4], matOp[i, 5], matOp[i, 6], mat[i, 7], mat[i, 8], mat[i, 9]) 函数执行此操作。

2