请教各位高手一个问题:如何计算某个月的第几个工作日是几号呢?
比如:我要得到2月份的第8个工作日是什么日期,应该如何实现呢?另外,这个是不考虑holiday的情况,如果考虑holiday的话,比如,2月14号我把它记入holiday,不能算作是工作日,这样的话又应该如何实现呢?多谢各位高手拉~
比如:我要得到2月份的第8个工作日是什么日期,应该如何实现呢?另外,这个是不考虑holiday的情况,如果考虑holiday的话,比如,2月14号我把它记入holiday,不能算作是工作日,这样的话又应该如何实现呢?多谢各位高手拉~
解决方案 »
- 数据库 查询语句
- sqlserver6.5转oracle
- Oracle一段代码,能否优化?
- 还是喜欢这个论坛,发一个求救帖,ORACLE的字符串替换帖子
- 在调用DBMS_UTILITY.FORMAT_CALL_STACK时返回信息不知如何理解
- 创建过程的问题,请老鸟进来看看!
- 困惑 不需要安装oracle系统软件吗?
- 如何用create table建立一张表时,同时指定表空间?
- :::::令人郁闷的 Oracle 开发程序问题求救:::::
- 在Developer用游标的问题。望高手们不啬赐教!
- a表group by 分组 查询之后 返回 的值 于 b表 进行联合查询 ,应该如何实现?
- 存储过程的问题,请高手帮下忙,先谢过了
现算出这个月份的第一天是周几 这个可以通过如下
select to_char(d, 'D') into v_day from dual; -- d为DATE型数据,可以通过字符串格式化 年月||'01',再格式化成d比如算出来to_number(v_day)是1表示是周日,则记为0,如果是7表示周六,则记为1,其他记为-1
这个记值表示为n
则平时的第八个工作日就是 8/5取整*7 + 8/5取余 + n,即 d + 7 + 3 + 0 = d+10
而d+10 表示就是那天,检查那天是否大于本月月末即 last_day(d)
如果还在本月返回 就是10+1 即11号如果有节假日,则看d+10这天和节假日比大小,如果节假日大则不考虑,原路返回
否则(小于等于),延至下一工作日即d+10递增1, d+11日,直至该日不在节假日和周六周日内
具体函数就不写了