ROracle 绑定日期范围

ROracle bind range of dates

我想通过 ROracle 查询发送到 oracle,其中包含日期列的日期范围的绑定参数。

我尝试 运行 :

idsample <- 123
strdate <- "TO_DATE('01/02/2017','DD/MM/YYYY')"
enddate <- "TO_DATE('01/05/2017','DD/MM/YYYY')"

res <- dbGetQuery(myconn,"SELECT * FROM MYTABLE WHERE MYID = :1 AND MYDATE BETWEEN :2 AND :3", data=data.frame(MYID =idsample , MYDATE=c(strdate,enddate )))

但我收到错误:

"bind data does not match bind specification"

我找不到涵盖使用多个位置参数的文档,但如果一个参数对应于数据框的一列,那么按照这个逻辑,三个参数应对应三列:

idsample <- 123
strdate <- "TO_DATE('01/02/2017', 'DD/MM/YYYY')"
enddate <- "TO_DATE('01/05/2017', 'DD/MM/YYYY')"
res <- dbGetQuery(myconn,
                  paste0("SELECT * FROM MYTABLE WHERE MYID = :1 AND ",
                         "MYDATE BETWEEN TO_DATE(:2, 'DD/MM/YYYY') AND TO_DATE(:3, 'DD/MM/YYYY')"),
                   data=data.frame(idsample, strdate, enddate))

请注意,从 API 的角度来看,strdateenddate 没有什么特别之处,因此它们应该作为向量传递。

编辑:

使 TO_DATE 成为参数的问题是它最终可能会作为字符串转义。换句话说,使用我的第一种方法,您最终会在 WHERE 子句中得到以下内容:

WHERE MYDATE BETWEEN
    'TO_DATE('01/02/2017','DD/MM/YYYY')' AND 'TO_DATE('01/05/2017','DD/MM/YYYY')'

换句话说,TO_DATE 函数调用最终成为一个字符串。相反,仅绑定日期字符串。