在Oracle SQL中使用变量

问题描述 投票:0回答:1

我对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,如果查询在星期一运行

sql oracle
1个回答
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  
© www.soinside.com 2019 - 2024. All rights reserved.