首页 > 解决方案 > 如何编写 PLSQL 以返回 SYSDATE 加 8 个工作日?

问题描述

如何编写 PLSQL 语句以返回SYSDATE加上 8 个工作日?ComputerTIME + 8
个工作日 "ORACLE" 数据库

例如:今天是 08/01/2018 -> 8 个工作日将是 08/13/2018

标签: sqloracleplsql

解决方案


您需要为此使用 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

SQL 小提琴演示

或者

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'))
  FROM t
 WHERE     TO_CHAR (dt, 'Dy') NOT IN ('Sat',
                                      'Sun',
                                      'NLS_DATE_LANGUAGE = American')
       AND dt > SYSDATE + 8

SQL 小提琴演示

如果您的任务是使用 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;

推荐阅读