我对Oracle SQL没有多少经验,并且一直在尝试完成我打算使用的任务
select count(*) from TABLE where date = (select trunc(sysdate -1 ) from dual)
上面的查询给出了sysdate减去1的所有记录的结果。我想自动处理Sat和Sunday的场景并将查询修改为如下所示
select count(*) from TABLE where date = (select trunc(sysdate -@var ) from dual)
其中@var = 2,如果查询在星期日运行,@ var = 3,如果查询在星期一运行
答案 0 :(得分:0)
TRUNC( SYSDATE, 'IW' )
会将日期截断为ISO周的开始日期 - 因此周一午夜。 TRUNC( SYSDATE ) - TRUNC( SYSDATE, 'IW' )
将给出自ISO周开始以来的整天天数(星期一= 0,星期二= 1,星期日= 6),您可以将其放入CASE
语句中:
select count(*)
from your_table
where date_col = TRUNC(SYSDATE) - CASE TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW')
WHEN 0 THEN 3 -- Monday
WHEN 6 THEN 2 -- Sunday
ELSE 1 -- Other days
END