oracle 如何查询2023-07-03至2023-08-06(自开始日期起5周)之间的所有日期?

cvxl0en2  于 2023-03-01  发布在  Oracle
关注(0)|答案(2)|浏览(203)

创建了以下数据库:

`INSERT INTO T4S_BRANCH_DATA (BR_NAME, BR_START, BR_COURSE_LN) VALUES ('COMMUNITY', 
TO_DATE('2023-07-03', 'YYYY-MM-DD'), 5);
INSERT INTO T4S_BRANCH_DATA (BR_NAME, BR_START, BR_COURSE_LN) VALUES ('HAF', TO_DATE('2023-07- 
03', 'YYYY-MM-DD'), 4);
INSERT INTO T4S_BRANCH_DATA (BR_NAME, BR_START, BR_COURSE_LN) VALUES ('HUBB', TO_DATE('2023- 
07-03', 'YYYY-MM-DD'), 4);

尝试查询:

`select BR_START + level - 1 DT
 from   t4s_branch_data where BR_NAME = 'COMMUNITY'
 connect by level <= (
 (BR_START + BR_COURSE_LN*7-1) - BR_START + 1);

但是,这将打印5,000行重复数据

46scxncf

46scxncf1#

在应用connectby子句之前,需要限制要使用的行:

with comm as
  (select * from t4s_branch_data where BR_NAME = 'COMMUNITY')
select BR_START + level - 1 DT
 from  comm
 connect by level <= (
 (BR_START + BR_COURSE_LN*7-1) - BR_START + 1);

或使用内联视图代替WITH子句

nsc4cvqm

nsc4cvqm2#

其中一个选项是在联接子查询中使用(足够多的)级别,以限制Where子句中生成的日期数:

SELECT        t.BR_START + l.LVL "DT"
FROM          t4s_branch_data t
INNER JOIN    ( SELECT LEVEL - 1 "LVL" From Dual Connect By LEVEL <= 60 ) l ON(1 = 1)
WHERE         t.BR_NAME = 'COMMUNITY' And l.LVL <= ( (t.BR_START + t.BR_COURSE_LN*7-1) - t.BR_START )

相关问题