Oracle SQL - 根据 current_date 更改 WHERE 条件

Posted

技术标签:

【中文标题】Oracle SQL - 根据 current_date 更改 WHERE 条件【英文标题】:Oracle SQL - change WHERE condition depending on current_date 【发布时间】:2021-01-12 17:42:21 【问题描述】:

我有一张类似的桌子

TradeDate        | Widgets
12-DEC-2020      6
13-DEC-2020      3
13-DEC-2020      9
14-DEC-2020      3
15-DEC-2020      12
15-DEC-2020      4
...
08-JAN-2020      11
...

我想编写一个每日查询,根据今天的日期返回一个结果集。如果今天的日期是 25-DEC-202001-JAN-2020 我想返回 TradeDate 是今天的日期或 1 天后的行。

TradeDate        | Widgets
25-DEC-2020      26
25-DEC-2020      13
26-DEC-2020      19
26-DEC-2020      34

否则,如果日期不是 12 月 25 日、1 月 1 日或其他指定日期,我只想检索当前日期的记录。如果今天的日期是 12 月 13 日,那么结果将显示:

    TradeDate        | Widgets
    13-DEC-2020      3
    13-DEC-2020      9

我以为我在 WHERE 中使用 CASE 做某事:

SELECT TradeDate, Widgets FROM table
WHERE 
CASE WHEN (current_date like '25-DEC%' OR current_date like '01-JAN%') 
  THEN (TradeDate = current_date or TradeDate = current_date +1 )
  ELSE TradeDate = Current_date

但这不起作用。有没有一种简单的方法来实现我所寻求的?动态WHERE条件?

【问题讨论】:

【参考方案1】:

你可以使用OR如下:

SELECT TradeDate, Widgets
  FROM table
 WHERE (to_char(sysdate,'dd-MON') in ('25-DEC','01-JAN')
         AND TRADEDATE >= TRUNC(SYSDATE) 
         AND TRADEDATE < TRUNC(SYSDATE) + 2
        )
        OR TRADEDATE = TRUNC(SYSDATE)

【讨论】:

【参考方案2】:

你可以使用:

where tradeDate >= trunc(sysdate) and
      tradeDate < trunc(sysdate) + interval '2' day

【讨论】:

以上是关于Oracle SQL - 根据 current_date 更改 WHERE 条件的主要内容,如果未能解决你的问题,请参考以下文章

第三十五章 SQL函数 CURRENT_DATE

Oracle 时间戳和 current_date

没有小时、分钟、秒的 Oracle current_date 或 sysdate [重复]

实验五:Oracle中的SQL使用

将 DB2 日期计算转换为 Oracle 语法

Oracle-RAC sysdate和current_date时间不一致,导致客户端连接时间延迟