RODBC如何为DB2添加动态日期,需要单引号

How RODBC add the dynamic date for DB2, need a single quote

我为我的代码添加了一个动态日期 '", 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=22007\r\n"   

我确定日期格式应该是 '2018-02-28' 所以如果我用 '2018-02-28' 替换 '", dt, "',上面的代码就可以正常工作。

我猜这是因为 R 字符串是双引号,但 db2 想要单引号。那么我该如何解决这个问题呢?

感谢任何想法,谢谢!

由于 paste 中的默认值使用 sep=" ",您的查询在日期值中读取这样的空格:

Select SUM_DATE from database where SUM_DATE= ' 2018-02-28 ';

要解决,请考虑 paste0pastesep=""

sql <- paste0("Select SUM_DATE from database where SUM_DATE= '", dt, "'")
df <- sqlQuery(db2, sql, as.is=TRUE)

更好的是使用参数化,运行 SQL 中的行业最佳实践在应用​​层如 R,你可以使用扩展包来实现,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))