我可以优雅地包括在R脚本格式化SQL字符串?(Can I gracefully include fo

2019-09-01 12:58发布

我在使用很长的SQL字符串的R脚本的工作,我想继续查询相对自由的其他标记,以便让编辑器和应用程序之间复制和粘贴。 我也想拆跨行查询可读性更好的能力。

在RODBC文档中, paste功能是用来构建查询出单独的块,但我喜欢的东西少缺憾和更少的引号和逗号。 谢谢你的帮助。

Answer 1:

您可以覆盖%+%,运营商有更好的字符串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 


Answer 2:

如果你从回来的路上是一个老的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 


Answer 3:

“包括”一个优雅的方式很长的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) 


Answer 4:

我建议只使用一个简单的字符串,而不是嵌入变量值进去。 使用占位符代替。

sql <- "SELECT foo FROM bar
    WHERE col1 = ?
    AND col2 = ?
    ORDER BY yomama"

我不知道,如果双引号是嵌入在R代码里面多行字符串的最佳方式(是有什么喜欢这里-docs的?),但它的工作,不像在Java中。

是有一些原因,你不希望发送"\n""\t"到你的数据库? 他们应该是在SQL罚款。



Answer 5:

我已经结束了简单的击打SQL字符串与sql <- gsub("\n","",sql)sql <- gsub("\t","",sql)运行它之前。 该字符串本身可以是只要它需要,但住宿免费任何拼接的标记。



文章来源: Can I gracefully include formatted SQL strings in an R script?
标签: sql r rodbc