ROracle绑定日期范围

时间:2017-10-30 11:25:12

标签: r bind roracle

我希望通过带有绑定参数的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 )))

但我收到错误:

&#34;绑定数据与绑定规范不匹配&#34;

1 个答案:

答案 0 :(得分:1)

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

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函数调用最终成为一个字符串。而是仅绑定日期字符串。