请教各位高手一个问题:如何计算某个月的第几个工作日是几号呢?
比如:我要得到2月份的第8个工作日是什么日期,应该如何实现呢?另外,这个是不考虑holiday的情况,如果考虑holiday的话,比如,2月14号我把它记入holiday,不能算作是工作日,这样的话又应该如何实现呢?多谢各位高手拉~

解决方案 »

  1.   

    这和所在年份也有关系 大体可以这样算
    现算出这个月份的第一天是周几 这个可以通过如下
    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日,直至该日不在节假日和周六周日内
    具体函数就不写了