如何编写PLSQL语句以返回SYSDATE
加8个工作日?
ComputerTIME + 8个工作日
“ ORACLE”数据库
例如:今天是2018年8月1日-> 8个工作日将是2018年8月13日
答案 0 :(得分:1)
您是否需要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
或
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
如果您的任务是使用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;
答案 1 :(得分:1)
您可以通过以下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;
P.S。
nls_date_language 的参数值及其各自的返回值(在我的情况下为 6 和 7 )可能会更改由于您的位置。