首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Schdule的最近5个工作日(不包括星期六和星期日)

Oracle Schdule的最近5个工作日(不包括星期六和星期日)
EN

Stack Overflow用户
提问于 2017-07-17 14:44:49
回答 1查看 164关注 0票数 0

我必须使用oracle schedule查找最近5个工作日。

代码语言:javascript
复制
select sysdate as current_date,
       case when to_char(sysdate,'D') in (1,2,7)
            then next_day(sysdate-7,'Friday')
            else sysdate-1 end as prev_weekday1,
       case when to_char(sysdate,'D') in (1,2,7)
            then next_day(sysdate-7,'Friday')
            else sysdate-2 end as prev_weekday2,
       case when to_char(sysdate,'D') in (1,2,7)
            then next_day(sysdate-7,'Friday')
            else sysdate-3 end as prev_weekday3,
       case when to_char(sysdate,'D') in (1,2,7)
            then next_day(sysdate-7,'Friday')
            else sysdate-4 end as prev_weekday4,
       case when to_char(sysdate,'D') in (1,2,7)
            then next_day(sysdate-7,'Friday')
            else sysdate-5 end as prev_weekday5
from dual

请帮助我是这种方式是正确的或任何其他优化的方式是有的。

EN

回答 1

Stack Overflow用户

发布于 2017-07-17 15:56:35

select level from dual connect by level <=7为level提供结果1..7。

使用此选项,选择最近七天并删除星期六和星期日:

代码语言:javascript
复制
select 'prev_weekday_' || rownum as prev_weekday, d.dt
  from (select trunc(sysdate) - level dt,
               to_char(sysdate - level, 'D') w_day
          from dual
        connect by level <= 7) d
 where d.w_day <= 5
 order by d.dt desc;

/*
prev_weekday_1  14.07.2017
prev_weekday_2  13.07.2017
prev_weekday_3  12.07.2017
prev_weekday_4  11.07.2017
prev_weekday_5  10.07.2017
*/

如果您需要列中的结果,那么pivot:

代码语言:javascript
复制
select *
  from (select 'prev_weekday_' || rownum as prev_weekday, d.dt
          from (select trunc(sysdate) - level dt,
                       to_char(sysdate - level, 'D') w_day
                  from dual
                connect by level <= 7) d
         where d.w_day <= 5
         order by d.dt desc)
pivot(max(dt)
   for prev_weekday in('prev_weekday_1' as prev_weekday_1,
                       'prev_weekday_2' as prev_weekday_2,
                       'prev_weekday_3' as prev_weekday_3,
                       'prev_weekday_4' as prev_weekday_4,
                       'prev_weekday_5' as prev_weekday_5));
/*
prev_weekday_1  prev_weekday_2  prev_weekday_3  prev_weekday_4  prev_weekday_5
  14.07.2017     13.07.2017      12.07.2017      11.07.2017      10.07.2017
*/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45137579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档