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
下面的代码是一个带有两个参数的存储过程。例如 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