-- 测试数据 建立工作日维表 with tmp_work_tab as( select trunc(sysdate-5) workdate, '1' is_work -- 0 非工作日 1 工作日 from dual union all select trunc(sysdate-4) , '1' from dual union all select trunc(sysdate-3) , '1' from dual union all select trunc(sysdate-2) , '0' from dual union all select trunc(sysdate-1) , '1' from dual)
-- 查询 SQL SELECT to_date('20110104','YYYYMMDD') - 2 - more_days "指定前2个工作日" ,to_date('20110104','YYYYMMDD') - 2 "指定前2天,包含非工作日" from ( -- 非工作日的天数 select COUNT(1) more_days -- to_date('20110104','YYYYMMDD') - 2 from tmp_work_tab WHERE WORKDATE BETWEEN to_date('20110104','YYYYMMDD') - 2 AND to_date('20110104','YYYYMMDD') AND IS_WORK = '0' );指定前2个工作日 指定前2天,包含非工作日 -------------------------------------------------- 2011-1-1 2011-1-2 实现思路:指定前2天工作日 = 指定日期 - 2 天 - (非工作日的天数)
select to_char(sysdate,'D') from dual; 可以求出某一天是一个星期中的第几天,注意是从星期天算起的. 有这个就很好办了吧,7 1两天不是工作日,其它的都是.
if to_char(sysdate, 'DY', 'nls_date_language=american') in ('SAT', 'SUN') then ……
根据你的题目,不能这样么,to_char(sysdate,'DAY')不是like('S%')开头的。
-- 测试数据 建立工作日维表 with tmp_work_tab as(
select trunc(sysdate-5) workdate, '1' is_work -- 0 非工作日 1 工作日
from dual union all
select trunc(sysdate-4) , '1' from dual union all
select trunc(sysdate-3) , '1' from dual union all
select trunc(sysdate-2) , '0' from dual union all
select trunc(sysdate-1) , '1' from dual)
-- 查询 SQL SELECT to_date('20110104','YYYYMMDD') - 2 - more_days "指定前2个工作日"
,to_date('20110104','YYYYMMDD') - 2 "指定前2天,包含非工作日"
from
(
-- 非工作日的天数
select COUNT(1) more_days -- to_date('20110104','YYYYMMDD') - 2
from tmp_work_tab
WHERE WORKDATE BETWEEN to_date('20110104','YYYYMMDD') - 2 AND to_date('20110104','YYYYMMDD')
AND IS_WORK = '0'
);指定前2个工作日 指定前2天,包含非工作日
--------------------------------------------------
2011-1-1 2011-1-2
实现思路:指定前2天工作日 = 指定日期 - 2 天 - (非工作日的天数)
可以求出某一天是一个星期中的第几天,注意是从星期天算起的.
有这个就很好办了吧,7 1两天不是工作日,其它的都是.