代码之家  ›  专栏  ›  技术社区  ›  oo mm

ROracle绑定日期范围

  •  1
  • oo mm  · 技术社区  · 8 年前

    我想通过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 )))
    

    但我有一个错误:

    “绑定数据与绑定规范不匹配”

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tim Biegeleisen    8 年前

    我找不到任何涉及使用多个位置参数的文档,但如果一个参数对应于数据帧的一列,则根据此逻辑,三个参数应对应于三列:

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

    注意,没有什么特别的 strdate enddate 从API的角度来看,它们应该作为向量传递。

    编辑:

    制作的问题 TO_DATE 一个参数是,它可能最终以字符串形式转义。换句话说,使用我的第一种方法,您将在您的 WHERE 条款:

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

    换句话说 截止日期 函数调用最终是一个字符串。相反,只绑定日期字符串。