r sqldf转义双引号

3
我希望在sqldf()中运行以下SQL语句:
select columnA, "new_column_value" as columnB, "column.C" from mytable
where columnA in ('123','456')

但是当我在sqldf中运行时:

sqldf('select columnA, "new_column_value" as columnB, "column.C" from mytable
    where columnA in ('123','456')')

当我在in('123','456')时,我遇到了明显的错误,单引号已经转义了sql代码。如果我用双引号包装sql代码,在创建新列 "new_column_value" 或从不太直观的"column.C"选择字面字符串时,sql会被转义。

所以我陷入了困境。好像我想在sqldf()调用中将我的sql代码用其他引号包装起来。

我是否可以在需要的地方同时转义单引号和双引号?


你能尝试使用 ` ? - Orhan Yazar
1
"sqldf(“SELECT columnA,'new_column_value' as columnB,'column.C' FROM mytable WHERE columnA in('123','456')”)" - Sagar
谢谢Sagar,我正要更新,我试过了,成功了。 - brucezepplin
我建议你学习如何使用R语法。在R中进行数据操作既简单又高效。 - David Arenburg
@G. Grothendieck - 你说得对。我将“variable”包装在计数语句中,其中使用了列值。否则会出现错误所以还是没有答案。 - brucezepplin
显示剩余2条评论
2个回答

3

R语言中,字符串中的双引号需要借助反斜杠进行转义:

test <- "String escaping is \"easy\"!"

这对你也应该适用。(将整个命令用双引号括起来,并通过反斜杠转义内部引号)

如果您查看intToUtf8(34),也可以看到这一点,其中34是双引号的ASCII代码。


嗨@AEF - 我已经尝试过这个了,似乎在sqldf中使用\"CODEHERE\"完全忽略了双引号,而不是允许它的行为 - 在这种情况下,告诉sql我正在使用一个字面字符串从列中选择。 - brucezepplin
这非常奇怪,因为转义应该在字符串发送到SQL引擎之前发生。此外,我刚刚发现了[这个][https://stackoverflow.com/questions/18686083/handling-quotation-marks-in-sqldf]问题,其中完全相同的事情起作用。 - AEF

0
假设使用默认的sqlite后端,以下任何一个都可以工作:
> sqldf("select \"Time\" from BOD")
  Time
1    1
2    2
3    3
4    4
5    5
6    7

> sqldf("select [Time] from BOD")
  Time
1    1
2    2
3    3
4    4
5    5
6    7

问题中的更新声称这个代码可以工作,但实际上它只返回了常量字符串Time,而不是该变量的值。
> sqldf("select 'Time' from BOD")
  'Time'
1   Time
2   Time
3   Time
4   Time
5   Time
6   Time

这是真的,所以现在我必须弄清楚为什么我的代码在不应该工作时却能工作:/ 我会找出原因并更新。 - brucezepplin
我碰巧正在使用 count('Time')。但是当使用 select 'Time' 时,正如你所指出的,我会输出表中的每一行的单词“Time”。你是正确的 - 我会删除我的更新。 - brucezepplin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接