【问题标题】:Mixing single and double quotes in the R paste function?在R粘贴函数中混合单引号和双引号?
【发布时间】:2014-02-17 13:52:20
【问题描述】:

这看起来很荒谬,但我就是无法做到这一点 - 非常感谢任何帮助!

基本上:我正在使用 RMySQL 执行一些简单的 SQL,以便了解 SQL 的工作原理。我想将几个 SQL select 查询链接在一起,作为一个简单的示例。这在 RMySQL PDF 中有介绍 - 但其中的示例似乎是不正确的语法(http://cran.r-project.org/web/packages/RMySQL/RMySQL.pdf,第 3 页,示例 6)。

如果我有三个查询,请这样说:

q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' "
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000"

并尝试paste他们如下:

script <- paste(q1, q2, q3, sep=";")

结果是

> script
[1] "SELECT db.table FROM table WHERE stuff = 'blah' ;SELECT fb.other_table FROM
other_table WHERE stuff = 'different blah' ;SELECT db.table2 FROM table2 WHERE table2 =
'1000'

所以调用dbSendQuery 显然失败了。

我试过\",但这也不起作用:

q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' \" "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' \""
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000 \" "

script <- paste(q1, q2, q3, sep=";")

> script
[1] "SELECT db.table FROM table WHERE stuff = 'blah' \" ;  ;SELECT db.other_table FROM
other_table WHERE stuff = 'different blah' \";SELECT db.table2 FROM table2 WHERE table2
= 1000 \" "

谁能指出我做错了什么?

编辑:只是为了澄清,通过 RMySQL 执行如下:

my.queries <- dbGetQuery(my.con, script, client.flag = CLIENT_MULTI_STATEMENTS)

根据 RMySQL 手册,我得到了

RS-DBI driver: (could not run statement: You have an error in your SQL syntax;

推测这是因为paste函数的结果应该是:

"SELECT db.table FROM table WHERE stuff = 'blah'" ;"SELECT fb.other_table FROM
other_table WHERE stuff = 'different blah'" ;"SELECT db.table2 FROM table2 WHERE table2
= '1000'"

每个单独的查询都可以正常工作,所以我假设是我的paste 命令导致了问题。

编辑:为了简化:假设我有两个字符串,如下:

t1 <- "the 'stuff'"
t2 <- "more 'stuff'"
paste(t1, t2, sep=";")
[1] "the 'stuff' ; more 'stuff' "

我想要粘贴命令的结果是"the 'stuff'";"more 'stuff'"

【问题讨论】:

  • 您的第一种方法似乎是正确的。有什么问题?
  • 感谢 Sven,已经添加了一些说明。
  • 您是否使用dbConnection 和参数client.flag = CLIENT_MULTI_STATEMENTS
  • 嗯,这很尴尬......我把client.flag = CLIENT_MULTI_STATEMENTS 放在dbGetQuery 电话里......非常感谢你解决了我的愚蠢问题,Sven!

标签: mysql r paste double-quotes rmysql


【解决方案1】:

您必须将参数client.flag = CLIENT_MULTI_STATEMENTS 传递给函数dbConnection,而不是dgGetQuery

那么,您的第一种方法应该可行:

q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' "
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000"

script <- paste(q1, q2, q3, sep=";")

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 2020-08-22
    • 2016-03-24
    • 2015-06-03
    • 2014-05-28
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多