R语言如何生成外层单引号、内层保留双引号的Exasol查询语句
解决方案
- 首先明确:你在控制台看到的
\转义符是R展示字符串的默认行为,并非字符串实际包含的内容,拼接后的字符串可以直接传入dbGetQuery执行,你可以用cat()函数验证字符串的真实内容:
# 拼接得到字符串 sql_str <- paste('SELECT * FROM schema."table" WHERE "id" >= ',5000,' and "id" < ',10000, sep="") # 打印真实内容,无转义符 cat(sql_str) # 直接调用即可正常执行 dbGetQuery(con, sql_str)
- 如果你想简化拼接逻辑,避免手动处理分隔符,可以使用
glue包实现更简洁的字符串插值:
library(glue) min_id <- 5000 max_id <- 10000 sql_str <- glue('SELECT * FROM schema."table" WHERE "id" >= {min_id} and "id" < {max_id}') dbGetQuery(con, sql_str)
- 优先推荐使用参数化查询,完全规避引号嵌套、转义问题,同时可以避免SQL注入风险:
library(DBI) # 用?作为参数占位符 sql_template <- 'SELECT * FROM schema."table" WHERE "id" >= ? and "id" < ?' # 传入参数列表执行查询 result <- dbGetQuery(con, sql_template, params = list(5000, 10000))
内容的提问来源于stack exchange,提问作者Bert
相关产品推荐
相关产品推荐

