PL/SQL 将星期几 'D' 从 1-7 转换为 0-6

PL/SQL To convert Day of Week 'D' from 1-7 to 0-6

下面的代码是一个带有两个参数的存储过程。例如 sp_DATE_D(2000,2001) 并且当您在 Application Express 中 运行 一个 select 语句的一行时,它 returns正在关注

DATE_KEY = 2000 年 1 月 1 日
FULL_DATE_DESCRIPTION = 2000 年 1 月 1 日星期六
DAY_OF_WEEK = 7

我读到您可以将星期几从 1 - 7 转换为 0 - 6。我相信它称为 crontab 编号。不确定如何实施。

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


Table定义:

CREATE TABLE DATE_D
(  
    DATE_KEY DATE NOT NULL,
    FULL_DATE_DESCRIPTION VARCHAR2(64) NOT NULL,
    DAY_OF_WEEK NUMBER(1,0) NOT NULL,
    CONSTRAINT DATE_D_PK PRIMARY KEY (DATE_KEY)
);

存储过程:

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;
/


post的解法:

TO_NUMBER(TO_CHAR(v_CURRENT_DATE,'D')) - 1,

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

如果你想得到星期几 -1 你可以插入

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