R 中的 SQL 查询传递两个日期作为参数

Jil*_*lum 2 sql db2 r

我有一个begin.dateand end.date,我想从这两个日期之间的 db2 表中检索行。

当我通过对这些值进行硬编码来运行查询时,它工作正常。

Data   =   dbGetQuery(conn, paste(
          "
          Select * From tableA
          WHERE DATE(Administered_Date) between '01-01-2011'  AND '01-31-2011' 
          "))
Run Code Online (Sandbox Code Playgroud)

但是当我将这两个日期作为参数传递而不是对它们进行硬编码时,会出现语法错误。这是我迄今为止的尝试。如果有人能告诉我我哪里出错了,那会很有帮助。提前致谢。

 library(RJDBC)
 i <- '0'
 begin.date = as.Date("2011-01-01") + as.numeric(i) + as.numeric('0')
 end.date   = as.Date("2011-01-01") + as.numeric(i) + as.numeric('31')

     Data   =   dbGetQuery(conn, paste(
      "
      Select * From tableA
      WHERE DATE(Administered_Date) between '", begin.date,"'"  AND '", end.date, "'" 
      ")) 
Run Code Online (Sandbox Code Playgroud)

Par*_*ait 5

只需使用RJDBC 页面上讨论的参数化查询 来处理准备好的语句。除了与 SQL 注入隔离之外,您还可以从代码 (SQL) 中提取数据 (R),而无需混乱的字符串连接和引号括起来,以增强可维护性和可读性:

SQLstring <- "SELECT * FROM tableA WHERE DATE(Administered_Date) BETWEEN ? AND ?"

Data <- dbGetQuery(conn, SQLstring, begin.date, end.date)
Run Code Online (Sandbox Code Playgroud)

可能需要强制日期as.character()以避免被读取为整数