用单引号粘贴日期

时间:2018-09-05 14:20:06

标签: r paste

我目前已写出一个函数,但是为了简单起见,我将发布一个更改的版本:

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)

2 个答案:

答案 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)