【问题标题】:Using Where Clause with Dates When Reading SQL Query in R在 R 中读取 SQL 查询时使用带日期的 Where 子句
【发布时间】:2019-08-12 14:04:28
【问题描述】:

我正在尝试使用找到的 SQL 函数 here 从 R 中查询 Oracle 数据库。

当我完成一个简单的查询时,比如

'SELECT * FROM TABLE_1'

查询执行良好。但是,当我在查询中添加条件日期语句时,例如

'SELECT * FROM TABLE_1 WHERE START_DT BETWEEN '01-JUL-2018' AND '30-JUN-2019'

我收到以下错误消息:

.oci.SendQuery 中的错误(conn,语句,数据 = 数据,预取 = 预取,:ORA-00904:“30-JUN-2019”:无效标识符

知道如何解决这个问题吗?

【问题讨论】:

    标签: sql r oracle


    【解决方案1】:

    确切的错误似乎是您没有转义您在 R 查询字符串中的日期文字周围放置的单引号。但是,修复它仍然会留下您的日期文字对 Oracle 无效的问题。我推荐使用这个:

    sql <- "SELECT * FROM TABLE_1 WHERE START_DT BETWEEN DATE '2018-07-01' AND DATE '2019-06-30'"
    

    您也可以使用TO_DATE 函数,例如TO_DATE('01-JUL-2018', 'DD-MON-YYYY'),但这比使用 DATE 关键字更难阅读。

    【讨论】:

    • 这是一个错误,假设 DATE 列实际上名为 START_DT。感谢举报;这是草率的问题写作。道歉
    • @Parfait I am attempting to query an Oracle datebase ... Oracle 中的日期文字有自己的规则。
    • @Parfait 出于这个原因,OP 应该避免使用列名“DATE”。 “DATE”关键字在 Oracle 中有意义,因此在考虑标识符名称时应避免使用。
    • 说得太早了。知道如何处理别名吗?似乎当我在引号中有引号时,见下文,我的查询中断:/ sql
    • 1) PROGRAM 不是 Oracle 关键字,因此它不需要在双引号中转义,并且 2) 如果是这样,那么您只需使用 R 字符串中的双引号转义反斜杠,例如\"PROGRAM\"
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多