一个小需求,统计周六日除外的工作日,记录下思路及解决方法
-- 获取时间区间内每一天
select to_date('2021-02-01', 'yyyy-MM-dd') + rownum - 1 as dateday
from dual
connect by rownum <= (to_date('2021-02-28', 'yyyy-MM-dd') -
to_date('2021-02-01', 'yyyy-MM-dd'))+1;
-- 判断是否是周六日 flag = 1 周六日
select case when to_char((to_date('2021-02-01', 'yyyy-MM-dd') + rownum - 1),'D') not in (1,7) then 0 else 1 end as flag,
to_date('2021-02-01', 'yyyy-MM-dd') + rownum - 1 as dateday
from dual
connect by rownum <= (to_date('2021-02-28', 'yyyy-MM-dd') -
to_date('2021-02-01', 'yyyy-MM-dd'))+1;
-- 统计 工作日 1
select sum(case when to_char((to_date('2021-02-01', 'yyyy-MM-dd') + rownum - 1),'D') not in (1,7) then 1 else 0 end) as workday
from dual
connect by rownum <= (to_date('2021-02-28', 'yyyy-MM-dd') -
to_date('2021-02-01', 'yyyy-MM-dd'))+1;
附:connect by 的使用方式: