Oracle 数据库上的 R 查询,其中日期是从今天算起的 x 天

问题描述

我已使用 R 连接到 oracle 数据库,我可以对其执行查询,但在对日期列执行查询时遇到问题。我想获取某个日期列 (INLDATE) 介于今天和 7 天之后的行。

我使用 dplyr 包执行的其他查询,如下所示;

tbl(con,'UNIT') %>% select(SEQ) %>% filter(SEQ > 203)

这很好用,但是当我尝试类似的东西时

Today <- Sys.Date()

tbl(con,'UNIT') %>% select(INLDATE) %>% filter(INLDATE > Today)

甚至

tbl(con,'UNIT') %>% select(INLDATE) %>% filter(INLDATE > 2021-04-04)

它给我的错误是它需要一个 DATE 但它被解释为一个数字或一个字符串

这样做的正确方法是什么?提前致谢!

enter image description here

解决方法

(这个用 SQL Server 测试很好,我没有可用的 Oracle,但前提是一样的。)

您的“日期”解析为算术表达式:

2021-04-04
# [1] 2013

您可以使用 dbplyr 了解如何在 show_query() 管道中解决此问题:

tbl(con,"UNIT") %>%
  filter(INLDATE > 2021-05-07) %>%
  show_query()
# <SQL>
# SELECT *
# FROM "UNIT"
# WHERE ("INLDATE" > 2021.0 - 5.0 - 7.0)

您需要的是 "2021-05-06"as.Date("2021-05-06")

tbl(con,"UNIT") %>%
  filter(INLDATE > "2021-05-07") %>%
  show_query()
# <SQL>
# SELECT *
# FROM "UNIT"
# WHERE ("INLDATE" > '2021-05-07')

tbl(con,"UNIT") %>%
  filter(INLDATE > as.Date("2021-05-07")) %>%
  show_query()
# <SQL>
# SELECT *
# FROM "UNIT"
# WHERE ("INLDATE" > TRY_CAST('2021-05-07' AS DATE))

要执行“从今天到 7 天后的范围”,您可以使用 between

tbl(con,"UNIT") %>%
  filter(between(INLDATE,"2021-04-04","2021-04-11")) %>%
  show_query()
<SQL>
SELECT *
FROM "UNIT"
WHERE ("INLDATE" BETWEEN '2021-04-04' AND '2021-04-11')