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 ';
要解决,请考虑 paste0
或 paste
和 sep=""
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))
我为我的代码添加了一个动态日期 '", 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 ';
要解决,请考虑 paste0
或 paste
和 sep=""
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))