Plsql PL/SQL将一周中的日期“D”从1-7转换为0-6

Plsql PL/SQL将一周中的日期“D”从1-7转换为0-6,plsql,oracle11g,Plsql,Oracle11g,下面的代码是一个接受两个参数的存储过程。例如,sp_DATE_d20002001,当您在Application Express中为一行运行select语句时,它将返回以下内容 日期=2000年1月1日 完整日期描述=2000年1月1日,星期六 每周的第天=7天 我读到你可以将一周中的一天从1-7转换为0-6。我相信它叫crontab号码。不知道如何实施 0=星期日 1=星期一 2=星期二 3=星期三 4=星期四 5=星期五 6=星期六 表定义: 存储过程: 你没有说出你想要达到的目标。你从哪里

下面的代码是一个接受两个参数的存储过程。例如,sp_DATE_d20002001,当您在Application Express中为一行运行select语句时,它将返回以下内容 日期=2000年1月1日 完整日期描述=2000年1月1日,星期六 每周的第天=7天 我读到你可以将一周中的一天从1-7转换为0-6。我相信它叫crontab号码。不知道如何实施

0=星期日 1=星期一 2=星期二 3=星期三 4=星期四 5=星期五 6=星期六

表定义:

存储过程:


你没有说出你想要达到的目标。你从哪里得到的sp是你写的吗

如果你想得到一周中的第1天,你可以插入

to_number(to_char(v_current_date,'D'))-1

我自己写的存储过程,我这样做是为了自己的学习。这是一个数据仓库。所以你在我的帖子,我的返回值中看到的是,在这两个参数之间,表格将填充从开始年的第一天到结束年的最后一天的日期。我的存储过程将包含更多的列,但我想从一点一点开始,在构建代码时处理错误。因此,您只需要从上面返回的数字中减去一个就可以了?这一部分很好。想想看,我试过的是把现在的日期改成-1,'D'。非常感谢!
CREATE OR REPLACE PROCEDURE sp_DATE_D(v_START_YEAR IN INT, v_END_YEAR IN INT) AS

v_CURRENT_DATE DATE;
v_END_DATE DATE;

BEGIN

v_CURRENT_DATE := TO_DATE('0101' || v_START_YEAR, 'MMDDYYYY');
v_END_DATE     := TO_DATE('1231' || v_END_YEAR, 'MMDDYYYY');

DELETE FROM DATE_D;

WHILE v_CURRENT_DATE <= v_END_DATE 
LOOP
INSERT INTO DATE_D
(
    DATE_KEY, 
    FULL_DATE_DESCRIPTION,
    DAY_OF_WEEK
)   
VALUES
(
    v_CURRENT_DATE,
    TO_CHAR(v_CURRENT_DATE, 'Day, Month DD, YYYY'),
    TO_CHAR(v_CURRENT_DATE, 'D')
);

v_CURRENT_DATE := v_CURRENT_DATE + 1;

END LOOP;
END;
/
TO_NUMBER(TO_CHAR(v_CURRENT_DATE,'D')) - 1,
to_number(to_char(v_current_date,'D'))-1