我目前已写出一个函数,但是为了简单起见,我将发布一个更改的版本:
i = '2018-08-05'
s = paste("SELECT
*
FROM table.a
WHERE event_date = DATE(", paste(i, collapse = " "), ")
LIMIT 10;
;", sep = '')
就目前而言,它将产生类似于以下内容的输出:
WHERE event_date = DATE(2018-08-05)
我需要它看起来像:
WHERE event_date = DATE('2018-08-05')
编辑:现在,最初的问题已解决,我遇到了一个有关R如何读取日期格式的问题:
dates <- seq.Date(from = as.Date('2018-07-01'), to = Sys.Date(), by = 1)
for(i in dates){
s = paste("SELECT
*
FROM table.a
WHERE event_date = DATE(", paste(i, collapse = " "), ")
LIMIT 10;
;", sep = '')
results_query <- dbGetQuery(con, s)
}
返回的格式类似于WHERE event_date = DATE(17713)
答案 0 :(得分:2)
在i
周围添加双引号以保留单引号:
i = "'2018-08-05'"
s = paste0("SELECT
*
FROM table.a
WHERE event_date = DATE(", i, ")
LIMIT 10;
;")
输出:
> cat(s)
SELECT
*
FROM table.a
WHERE event_date = DATE('2018-08-05')
LIMIT 10;
;
编辑-我建议尝试@G。 Grothendieck的解决方案,但这是我将使用for
循环来做到的方法:
dates <- seq.Date(from = as.Date('2018-07-01'), to = Sys.Date(), by = 1)
for(i in seq_along(dates)){
s = paste0("SELECT
*
FROM table.a
WHERE event_date = DATE('", dates[i], "')
LIMIT 10;
;")
results_query <- dbGetQuery(con, s)
}
答案 1 :(得分:1)
1) gsubfn程序包包含一个函数fn$
,当该函数作为其他任何函数的开头时,将扫描其参数并执行字符串插值。如果使用的是sqldf软件包,则gsubfn已自动加载,否则,您可以使用library
。在变量名前添加$,以将其值替换为字符串。
library(gsubfn)
sql <- fn$identity(
"SELECT *
FROM event_date = DATE('$i')
LIMIT 10"
)
或者您可以在使用fn$
而不是使用identity
来将字符串发送到数据库时使用的任何函数作为开头。
2)一个基本的解决方案是使用sprintf:
fmt <-
"SELECT *
FROM event_date = DATE('%s')
LIMIT 10"
sql <- sprintf(fmt, i)