【发布时间】:2019-03-31 19:11:42
【问题描述】:
我需要在 SQL 数据库中插入一个数据框。我已经构建了脚本(使用循环、str_c、RODBC)将我的数据框转换为 SQL 插入命令,但是我遇到了一个问题,即一个“'”破坏了 SQL。
这是一个问题的例子:
数据框如下所示:
pk b
1 o'keefe
所需的 SQL 输出为:INSERT INTO table (pk, b) (1, 'o\'keefe')
gsub("'", "\'", str_replace_na(df$b[1], ""))
[1] "o'keefe"
gsub("'", "\\\\'", str_replace_na(df$b[1], ""))
[1] "o\\'keefe"
我试过str_replace、str_replace_all、gsub w/fixed = TRUE 和perl = TRUE,我得到了相同的结果。
我知道How to give Backslash as replacement in R string replace 上的评论指出cat() 显示斜线。但这不会延续到我的数据框或 SQL 查询中。
对于这个问题的任何帮助将不胜感激!
附加说明,我知道 R 会打印一个双反斜杠,如 http://r.789695.n4.nabble.com/gsub-replacing-double-backslashes-with-single-backslash-td4453328.html 和 R: How to replace space (' ') in string with a *single* backslash and space ('\ ') 所引用,即使只有一个斜杠确实存在。但是,当出现零个或两个反斜杠时,我的 SQL 语句仍然无法工作。
【问题讨论】:
-
标准 SQL 要求您将单引号内的单引号加倍。 C 风格的反斜杠不是标准 SQL 的一部分(尽管您正在使用但未提及的数据库可能支持它作为标准 SQL 的扩展)..
-
很遗憾我没有使用标准 SQL,我使用的是 FileMaker Pro 的 SQL,它需要一个单引号。 (参见fmhelp.filemaker.com/docs/13/en/fm13_sql_reference.pdf,第 18 页)。