ORACLE中给定一个日期,判断这个日期是否是工作日。

冥月天 2011-01-04 06:44:33
我现在要做一个存储过程,用来统计几类事件,每个事件都有单独的统计时间,比如统计事件1的时间范围是统计月上个月的最后一个工作日向前推2个工作日,像这样的存储过程,该怎么写呢?o(︶︿︶)o 唉,头疼!
...全文
2071 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
etsilence 2011-01-12
  • 打赏
  • 举报
回复
select to_char(sysdate,'D') from dual;
可以求出某一天是一个星期中的第几天,注意是从星期天算起的.
有这个就很好办了吧,7 1两天不是工作日,其它的都是.
fingerfox 2011-01-12
  • 打赏
  • 举报
回复
假期要自定义的,每个国家地区的假期未必一样。呵呵
sunlaji008 2011-01-12
  • 打赏
  • 举报
回复
if to_char(sysdate, 'DY', 'nls_date_language=american') in ('SAT', 'SUN') then ……
coolkisses 2011-01-05
  • 打赏
  • 举报
回复

-- 测试数据 建立工作日维表

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 天 - (非工作日的天数)
冥月天 2011-01-05
  • 打赏
  • 举报
回复
有根据机构指定的部门工作日程表。
iihero_ 2011-01-05
  • 打赏
  • 举报
回复
正规公司的HR系统都是在年初指定了该年哪些固定假期,然后计算工作日。
coolkisses 2011-01-04
  • 打赏
  • 举报
回复
工作日不是固定的,所以,还是维护一个工作日维表吧
james_li85 2011-01-04
  • 打赏
  • 举报
回复
维护一个表,证券行业都是这样的,哈哈
物润声无 2011-01-04
  • 打赏
  • 举报
回复
得看holiday 表是怎么建的啊, 如果holiday 表中都标记了每一天是工作日或假期,那处理就方便了
yuhongpingimu 2011-01-04
  • 打赏
  • 举报
回复
我太菜,看不太懂
根据你的题目,不能这样么,to_char(sysdate,'DAY')不是like('S%')开头的。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧