如何编写PLSQL以返回SYSDATE加上8个工作日?

如何编写PLSQL以返回SYSDATE加上8个工作日?,sql,oracle,plsql,Sql,Oracle,Plsql,如何编写PLSQL语句以返回SYSDATE加上8个工作日? 计算机时间+8个工作日 ORACLE数据库 例如:今天是2018年8月1日->8个工作日将是2018年8月13日您需要使用PL/SQL吗?有了SQL查询,您就能够获得结果,那么为什么要使用PL/SQL呢?当使用SQL无法实现预期结果时,需要PL/SQL 尝试以下操作,根据您的要求进行必要的更改 WITH t AS ( SELECT SYSDATE + LEVEL AS dt FROM DUA

如何编写PLSQL语句以返回SYSDATE加上8个工作日? 计算机时间+8个工作日 ORACLE数据库


例如:今天是2018年8月1日->8个工作日将是2018年8月13日

您需要使用PL/SQL吗?有了SQL查询,您就能够获得结果,那么为什么要使用PL/SQL呢?当使用SQL无法实现预期结果时,需要PL/SQL

尝试以下操作,根据您的要求进行必要的更改

WITH t
     AS (    SELECT SYSDATE + LEVEL AS dt
               FROM DUAL
         CONNECT BY LEVEL <= 31)
SELECT (TO_CHAR (dt, 'DD-MON-YYYY fmDay', 'NLS_DATE_LANGUAGE = American'))
  FROM t
 WHERE     TO_CHAR (dt, 'Dy') NOT IN ('Sat',
                                      'Sun',
                                      'NLS_DATE_LANGUAGE = American')
       AND dt > SYSDATE + 8

如果您的任务是使用PL/SQL,请使用下面的命令获得所需的输出

DECLARE
   v_dt   VARCHAR2 (32);
BEGIN
   WITH t
        AS (    SELECT SYSDATE + LEVEL AS dt
                  FROM DUAL
            CONNECT BY LEVEL <= 31)
   SELECT MIN (
             TO_CHAR (dt,
                      'DD-MON-YYYY fmDay',
                      'NLS_DATE_LANGUAGE = American'))
     INTO v_dt
     FROM t
    WHERE     TO_CHAR (dt, 'Dy') NOT IN ('Sat',
                                         'Sun',
                                         'NLS_DATE_LANGUAGE = American')
          AND dt > SYSDATE + 8;

   DBMS_OUTPUT.put_line (v_dt);
   RETURN;
END;

您可以通过以下SQL SELECT语句直接完成下一个业务日期,即当前日期后的八天:

select trunc(sysdate) + rn as eight_next_business_day
  from
(
 select sum(dy) over (order by rn) sm, rn
   from
   (
    select (case when to_char(sysdate+level-1,'D','nls_date_language=turkish') in (6,7)
                 then 0
                 else 1 end ) as dy,
           row_number() over (order by level) as rn 
      from dual
   connect by level <= 31
   ) 
)
where sm = 8;
附言


nls_date_language参数的值,在我的例子中,其各自的返回值6和7可能会因您的位置而更改。

为什么需要PL/SQL?8个工作日是否意味着不包括周六和周日?我有一个任务,需要返回SYSDATE->Correct not Saturday and Sundays->例如今天是2018年1月8日->8个工作日将是2018年13月8日。公共假日如何?TO_CHAR dt的结果,“Dy”取决于当前用户会话NLS_date_语言,所以你的解决方案可能不起作用。user75ponic…问题。。您已选择MIN。。。。从t…为什么叫它t?@JLSG从日期列表中获取最短日期或第一个日期。@JLSG希望我已经讲清楚了,否则请告诉我。
select trunc(sysdate) + rn as eight_next_business_day
  from
(
 select sum(dy) over (order by rn) sm, rn
   from
   (
    select (case when to_char(sysdate+level-1,'D','nls_date_language=turkish') in (6,7)
                 then 0
                 else 1 end ) as dy,
           row_number() over (order by level) as rn 
      from dual
   connect by level <= 31
   ) 
)
where sm = 8;