IF函数通过确定星期一来确定是否应该使用SYSDATE-1或SYSDATE-3

时间:2018-02-05 21:35:39

标签: oracle-sqldeveloper

我为前一天的数据运行此报告周一至周五,我试图找出如何硬编码TO_CHAR(TRUNC(SYSDATE-3),如果今天是 星期一(运行报告的那天)或使用TO_CHAR(TRUNC(SYSDATE-1)表示任何其他工作日(星期一)。我假设这将需要IF,THEN,ELSE语句,但我不确定如何包含正确地进入我的查询。

SELECT
RRA.LAST_MODIFICATION_DATE AS "LAST MODIFICATION DATE",

TO_CHAR(TRUNC(SYSDATE-1),'DD-MON-RR') AS "DATA_DATE"

FROM PHOENIX.R_REFERRAL_ACTIVITY RRA
Where 1=1

AND RRA.LAST_MODIFICATION_DATE 
BETWEEN TO_CHAR(TRUNC(SYSDATE-1),'DD-MON-RR') AND TO_CHAR(TRUNC(SYSDATE),'DD-MON-RR')

1 个答案:

答案 0 :(得分:1)

阿哈;那么好吧,你似乎需要使用CASE和TO_CHAR函数来告诉你哪一天是“今天”。看看,看看它是否有帮助。

TEST只是一个简单的日历,在今年2月的几天。我正在删除周六和周日(正如你所说,你只对周一有兴趣)。

SQL> with test as
  2    (select trunc(sysdate, 'mm') + level - 1 c_date,
  3            to_char(trunc(sysdate, 'mm') + level - 1, 'dy') c_day
  4     from dual
  5     connect by level < 20
  6    )
  7  select
  8    c_date todays_date,
  9    c_day,
 10    --
 11    c_date - case when c_day = 'mon' then 3
 12                  else 1
 13             end previous_work_date,
 14    --
 15    to_char(c_date - case when c_day = 'mon' then 3
 16                          else 1
 17                     end, 'dy') previous_work_day
 18  from test
 19  where c_day not in ('sat', 'sun')
 20  order by 1;

TODAYS_DAT C_D PREVIOUS_W PRE
---------- --- ---------- ---
01.02.2018 thu 31.01.2018 wed
02.02.2018 fri 01.02.2018 thu
05.02.2018 mon 02.02.2018 fri
06.02.2018 tue 05.02.2018 mon
07.02.2018 wed 06.02.2018 tue
08.02.2018 thu 07.02.2018 wed
09.02.2018 fri 08.02.2018 thu
12.02.2018 mon 09.02.2018 fri
13.02.2018 tue 12.02.2018 mon
14.02.2018 wed 13.02.2018 tue
15.02.2018 thu 14.02.2018 wed
16.02.2018 fri 15.02.2018 thu
19.02.2018 mon 16.02.2018 fri

13 rows selected.

SQL>