【问题标题】:r sqldf escape double quotesr sqldf 转义双引号
【发布时间】:2018-01-17 11:49:08
【问题描述】:

我希望在 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" 或当我选择时,sql 会被转义通过来自毫无帮助的 "column.C" 的文字字符串。

所以我有点担心 22。就好像我想用 sql 代码在 sqldf() 调用中用引号以外的东西换行一样。

我可以在我喜欢的地方同时转义单引号和双引号吗?

【问题讨论】:

  • 你可以尝试使用`?
  • 用双引号发布整个语句并在内部使用单引号而不转义应该可以。 sqldf("SELECT columnA, 'new_column_value' as columnB, 'column.C' FROM mytable WHERE columnA in ('123','456')")
  • 感谢 Sagar 即将更新我尝试成功
  • 很高兴您尝试过并且成功了。
  • 我建议您学习如何使用 R 语法。 R 中的数据操作既简单又高效。

标签: r sqldf


【解决方案1】:

在 R 字符串中,双引号用反斜杠转义:

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

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

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

【讨论】:

  • 嗨@AEF-我已经尝试过了,似乎在sqldf中使用\"CODEHERE\"完全忽略了双引号,而不是允许它的行为-在这种情况下是告诉sql我正在从中选择使用文字字符串的列。
  • 这很奇怪,因为转义应该发生在字符串发送到 SQL 引擎之前。另外,我刚刚发现 [this][stackoverflow.com/questions/18686083/… 问题完全相同的工作。
【解决方案2】:

假设默认的 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

【讨论】:

  • 这是真的,所以现在我必须弄清楚为什么我的代码在它不应该工作的时候工作:/我会弄清楚并更新
  • 我碰巧在使用count('Time')。但是当您使用select 'Time' 时,正如您所指出的,我会为表中的许多行输出“时间”一词。你是对的 - 我会删除我的更新
猜你喜欢
  • 2011-06-09
  • 2020-11-26
  • 1970-01-01
  • 2013-06-17
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
相关资源
最近更新 更多