2017-08-09 97 views
1

我想运行sqldf()内的下列SQL语句:[R sqldf逃脱双引号

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')') 

我得到了明显的错误,单一引号已经脱离了sql代码in('123','456'),并且如果我用双引号将sql代码包装起来,那么sql会在我创建新列"new_column_value"时或者通过文字字符串从无用的名称"column.C"中选择时被转义。

所以我在一个捕获22位。这几乎就像我想通过sqldf()调用内的引号之外的东西包装sql代码。

我可以在哪里找到单引号和双引号?

+0

你可以尝试使用'? –

+1

使用双引号发布整个语句并在不使用转义的情况下使用单引号应该可行。 sqldf(“SELECT columnA,'new_column_value'as columnB,'column.C'FROM mytable WHERE columnA in('123','456')”) – Sagar

+0

Thanks感谢萨加尔正在更新我试图成功 – brucezepplin

回答

0

在该R串双引号由反斜线:

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

这应该为你工作了。 (将整个命令用双引号括起来,并用一个反斜杠将内部命令转义出来)

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

+0

嗨@AEF - 我已经尝试过这一点,似乎在sqldf内使用'\“CODEHERE \”完全忽略双引号,而不是允许它的行为 - 在这种情况下,告诉sql,我我正在使用文字字符串从列中进行选择。 – brucezepplin

+0

这很奇怪,因为在将字符串发送到SQL引擎之前应该发生转义。另外,我刚刚发现[this] [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 
+0

这是真的,所以现在我必须弄清楚为什么我的代码在不应该的时候工作:/我会计算出并更新 – brucezepplin

+0

我刚好在使用count('Time')'。但是当你指出我使用'选择'时间'时,我输出表格中无论多行的单词时间。你是对的 - 我会删除我的更新 – brucezepplin