我有一个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)
只需使用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()以避免被读取为整数。
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |