微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

相当于DATEADD工作日,-3,GETDATE的Oracle10克

如何解决相当于DATEADD工作日,-3,GETDATE的Oracle10克

| 我正在寻找相当于的Oracle(10g):
DATEADD(weekday,-3,GETDATE())
从T-sqlsql Server)。这将从当前日期减去3个工作日。我不担心假期或类似的事情(而且我可以将自己的时间缩短)。仅排除周末即可。     

解决方法

看来您需要创建一个UDF。
CREATE OR REPLACE FUNCTION business_date (start_date DATE,days2add NUMBER) RETURN DATE IS
 Counter NATURAL := 0;
 CurDate DATE := start_date;
 DayNum POSITIVE;
 SkipCntr NATURAL := 0;
 Direction INTEGER := 1;  -- days after start_date
 BusinessDays NUMBER := Days2Add;
BEGIN
  IF Days2Add < 0 THEN
    Direction := - 1; -- days before start_date
    BusinessDays := (-1) * BusinessDays;
  END IF;

  WHILE Counter < BusinessDays LOOP
    CurDate := CurDate + Direction;
    DayNum := TO_CHAR( CurDate,\'D\');

    IF DayNum BETWEEN 2 AND 6 THEN
      Counter := Counter + 1;
    ELSE
      SkipCntr := SkipCntr + 1;
    END IF;
  END LOOP;

  RETURN start_date + (Direction * (Counter + SkipCntr));
END business_date;
来自这里的拉里·本顿(Larry Benton)提供。     ,无需PL / SQL函数即可完成。只需减去一周中的不同天数即可:
select trunc(sysdate) - case to_char(sysdate,\'D\')
                        when \'4\' then 3 -- thursday minus 3 days
                        when \'5\' then 3 -- friday minus 3 days
                        when \'6\' then 4 -- saturday minus 4 days
                        else 5          -- all other days minus 5 days
                        end
from dual;
当您必须这样做时12天后,它看起来像:
select trunc(sysdate) - case to_char(sysdate,\'D\')
                        when \'1\' then 18 -- mondays minus 18 days (incl. 3 weekends)
                        when \'2\' then 18 -- tuesdays minus 18 days (incl. 3 weekends)
                        when \'6\' then 17 -- saturdays minus 17 days (incl. 2 weekends and a saturday)
                        else 16          -- all others minus 16 days (incl. 2 weekends)
                        end
from dual;
请注意,星期几取决于数据库的NLS_TERRITORY(在美国,第1天是星期日,在大多数其他情况下,第1天是星期一)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。