我在使用很长的SQL字符串的R脚本的工作,我想继续查询相对自由的其他标记,以便让编辑器和应用程序之间复制和粘贴。 我也想拆跨行查询可读性更好的能力。
在RODBC文档中, paste
功能是用来构建查询出单独的块,但我喜欢的东西少缺憾和更少的引号和逗号。 谢谢你的帮助。
我在使用很长的SQL字符串的R脚本的工作,我想继续查询相对自由的其他标记,以便让编辑器和应用程序之间复制和粘贴。 我也想拆跨行查询可读性更好的能力。
在RODBC文档中, paste
功能是用来构建查询出单独的块,但我喜欢的东西少缺憾和更少的引号和逗号。 谢谢你的帮助。
您可以覆盖%+%,运营商有更好的字符串concatination语法:
'%+%' <- function(x,y) paste(x,y,sep="")
y<-"y1"
x<-"somethingorother"
query<-
'SELECT DISTINCT x AS ' %+% x %+%',\n' %+%
' y AS ' %+% y %+% '\n' %+%
' FROM tbl
WHERE id=%s
AND num=%d'
cat(query,"\n")
收益率:
> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
y AS y1
FROM tbl
WHERE id=%s
AND num=%d
如果你从回来的路上是一个老的C程序员,因为我,你可能会使用的sprintf享有公正()。
借用伊恩的例子:
y<-"y1"
x<-"somethingorother"
query <- sprintf(
'SELECT DISTINCT x AS %s,
y AS %s,
FROM tbl
WHERE id=%%s
AND num=%%d', x, y)
收益率:
> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
y AS y1,
FROM tbl
WHERE id=%s
AND num=%d
“包括”一个优雅的方式很长的SQL查询是要保持它在一个单独的.sql
文件。 最好的地方,可以语法高亮,在RStudio一个文本文件,将做的工作。 然后,您可以在您的主要研发脚本文件读入到一个字符串,并使用了许多“命名”的一个变量来填充它sprintf
型解决方案,如浸泡 。
.SQL
select *
from mytable
where id = {{a}}
and somevar = {{b}}
.R
library(readr)
library(infuser)
query <- read_file("query.sql") %>%
infuse(a = 1, b = 2)
我建议只使用一个简单的字符串,而不是嵌入变量值进去。 使用占位符代替。
sql <- "SELECT foo FROM bar
WHERE col1 = ?
AND col2 = ?
ORDER BY yomama"
我不知道,如果双引号是嵌入在R代码里面多行字符串的最佳方式(是有什么喜欢这里-docs的?),但它的工作,不像在Java中。
是有一些原因,你不希望发送"\n"
或"\t"
到你的数据库? 他们应该是在SQL罚款。
我已经结束了简单的击打SQL字符串与sql <- gsub("\n","",sql)
和sql <- gsub("\t","",sql)
运行它之前。 该字符串本身可以是只要它需要,但住宿免费任何拼接的标记。