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



我为我的代码添加一个动态日期'", 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 ';

要解决此问题,请考虑paste0pastesep=""

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

最新更新