首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日期+7个工作日

日期+7个工作日
EN

Stack Overflow用户
提问于 2014-09-18 11:01:28
回答 2查看 169关注 0票数 1

我需要写一个函数,给我一个新的到期日发票。这需要在当前到期日之后的12个工作日,例如当前的到期日是2014年10月1日。如果我手动查看我的日历,我可以看到新的日期是2014年10月17日(需要排除周末)。

不过,我还有一张带银行假日的桌子。必须考虑到这一点。因此,如果我在2014年10月4日有一个银行假期,新的到期日应该是2014年10月18日。

编辑:我在银行假日的桌子看起来应该是这样的:

年份:日期:说明

2014年10月4日银行假日1

这方面的任何帮助都将是非常感谢的,我已经坚持了将近一天了。

提前谢谢。

亲切的问候

格本

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-18 16:04:48

最后我做的事情有点不同。我有一张有我所有银行假期的桌子。我创建了第二个表作为一种日历。在这里,我在一年内把所有的日期都装上了。然后,我将其标记为周末或银行假日(两栏)。

我取了我原来的预产期,再加上12天。然后我有一个开始和结束日期(v_due_date_old和v_due_date_new)

在此之后,我数一数我的“日历”表中有多少天,周末或银行假日的国旗设置为“是”。如果v_due_date_new是星期六,我在我的计数中再加上一天。

然后我将新的计数添加到v_due_date_new中。

作为最后一步,我检查v_due_date_new是哪一天。如果是星期六或星期天,我再加两天。

票数 0
EN

Stack Overflow用户

发布于 2014-09-18 12:09:14

像这样的事情应该有效:

代码语言:javascript
复制
DECLARE
  l_date DATE := SYSDATE;

  FUNCTION IS_WEEKEND(P_DATE IN DATE)
    RETURN BOOLEAN
  IS
    l_daynum VARCHAR2(1) := to_char (P_DATE, 'D');
  BEGIN
    RETURN l_daynum = '6' OR l_daynum = '7';
  END;

  FUNCTION IS_HOLIDAY(P_DATE IN DATE)
    RETURN BOOLEAN
  IS
    CURSOR c_exists IS
      SELECT 1 FROM bank_holidays WHERE date = TRUNC(P_DATE)
    ;
    l_count NUMBER;
  BEGIN
    OPEN c_exists;
    l_count := c_exists%ROWCOUNT;
    CLOSE c_exists;
    RETURN l_count > 0;
  END;

  PROCEDURE ADD_WORKING_DAYS(P_DATE IN OUT DATE, P_DAYS IN NUMBER)
  IS
    l_workdays_added NUMBER := 0;
  BEGIN
    WHILE TRUE
    LOOP
      P_DATE := P_DATE + 1;
      IF NOT IS_WEEKEND(P_DATE) AND NOT IS_HOLIDAY(P_DATE) THEN
        l_workdays_added := l_workdays_added + 1;
      END IF;
      IF l_workdays_added = P_DAYS THEN
        RETURN;
      END IF;
    END LOOP;
  END;

BEGIN
  ADD_WORKING_DAYS(l_date, 12);
END;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25910897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档