我为我的代码添加一个动态日期'", dt, "'
,如下所示。
我首先将日期作为字符串,然后粘贴到 sqlQuery 中。
today<-Sys.Date()
monthStart <- function(x) {
x <- as.POSIXlt(x)
x$mday <- 1
as.Date(x)
}
dt_date<-monthStart(today)-1
dt<-as.character(dt_date)
df<-sqlQuery(db2,paste("
Select SUM_DATE from database where SUM_DATE= '", dt, "'
"), as.is=TRUE)`
但错误说:
[1] "22007 -180 [IBM][CLI Driver][DB2] SQL0180N The syntax of the string representation of a datetime value is incorrect. SQLSTATE=22007rn"
我相信日期格式应该'2018-02-28'
因此,如果我将'", dt, "'
替换为'2018-02-28'
,上面的代码可以正常工作。
我想这是因为 R 字符串是双引号,但 db2 想要单引号。那么我该如何解决这个问题呢?
任何想法都值得赞赏,谢谢!
由于paste
中的默认值使用sep=" "
,您的查询在日期值中读取以下空格:
Select SUM_DATE from database where SUM_DATE= ' 2018-02-28 ';
要解决此问题,请考虑paste0
或paste
sep=""
sql <- paste0("Select SUM_DATE from database where SUM_DATE= '", dt, "'")
df <- sqlQuery(db2, sql, as.is=TRUE)
更好的是使用参数化,这是在R等应用层运行SQL的行业最佳实践,您可以使用扩展包RODBCext来实现。
library(RODBCext)
df <- sqlExecute(db2, "Select SUM_DATE from database where SUM_DATE = ?", dt, fetch=TRUE)
我建议尝试sprintf(),因为你仍然需要在日期前后使用单引号。
df<-sqlQuery(db2,sprintf("Select SUM_DATE from database where SUM_DATE='%s'",dt))