作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 DBI::sqlInterpolate
生成一堆 SQL 脚本函数,但由于脚本嵌入了与 R 变量一起返回的引号,因此不断出现 SQL 错误。
这是代码:
> x<-'state_transtions'
> y<-'transition_time'
> script<-"select * from ?x WHERE DATE(?y)> DATE_SUB(NOW(), INTERVAL 1 DAY)"
> sqlInterpolate(ANSI(),script,x=x,y=y)
#<SQL> select * from 'state_transtions' WHERE DATE('transition_time')> DATE_SUB(NOW(), INTERVAL 1 DAY)
最佳答案
1) gsubfn gsubfn
在 gsubfn 包中可以做替换。这里的正则表达式匹配一个问号后跟单词字符,然后它使用第二个参数中定义的对应关系对正则表达式中括号内部分匹配的部分执行替换。
library(gsubfn)
gsubfn("[?](\\w+)", list(x = x, y = y), script)
[1] "select * from state_transtions WHERE DATE(transition_time)> DATE_SUB(NOW(), INTERVAL 1 DAY)"
fn$
它可以作为任何函数的前缀,并将对其参数执行字符串插值,给出相同的结果。
identity
可以用任何其他合适的 R 函数替换。
library(gsubfn)
script2 <- "select * from $x WHERE DATE($y)> DATE_SUB(NOW(), INTERVAL 1 DAY)"
fn$identity(script2)
library(sqldf)
var <- "Time"
fn$sqldf("select $var from BOD where $var > `mean(1:7)`")
Time
1 5
2 7
sprintf
来执行此操作。
sprintf("select * from %s WHERE DATE(%s)> DATE_SUB(NOW(), INTERVAL 1 DAY)", x, y)
关于r - 如何从 R 的 sqlInterpolate 函数中删除嵌入的引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45713003/
我是一名优秀的程序员,十分优秀!