如何基于Oracle SQL中的日期字段生成日期范围内每7天一次的日期列表?

ijxebb2r  于 2023-01-25  发布在  Oracle
关注(0)|答案(2)|浏览(379)

我需要生成一个列表的周末日期的基础上,第一周结束日期,并在一个日期范围。
例如:我的周末日期为"06/04/2022"。如果输入06/01/2022 - 01/01/2023作为日期参数,我需要一个从06/04/2022到01/01/2023的每七天列表。输出如下所示:
| 日期|
| - ------|
| 2022年4月6日|
| 2022年6月11日|
| 2022年6月18日|
| 。|
| 。|
| 。|
| 二○二二年十二月二十四日|
| 2022年12月31日|
注意:最初的周结束日期不一定总是在星期六,所以它需要基于实际日期,而不是一周中的哪一天。
我有这段代码可以生成两个日期之间的每一天,但是我需要两个日期之间的每七天,并且基于从另一个表中检索到的日期字段。我被困在如何从该日期获得每七天或每周。

select (date'2022-06-04' + level - 1) dt
from   dual
connect by level <= (date'2023-01-01' - date'2022-06-01' + 1)
vdzxcuhz

vdzxcuhz1#

步长乘以7:

SELECT DATE '2022-06-04' + (level - 1) * 7 AS dt
FROM   dual
CONNECT BY DATE '2022-06-04' + (level - 1) * 7 <= DATE '2023-01-01'

或者,为了使您正在执行的计算更明显地表明您正在添加一个星期,您可以使用INTERVAL文本:

SELECT DATE '2022-06-04' + (level - 1) * INTERVAL '7' DAY AS dt
FROM   dual
CONNECT BY DATE '2022-06-04' + (level - 1) * INTERVAL '7' DAY <= DATE '2023-01-01'
bjp0bcyl

bjp0bcyl2#

您还可以计算您的连接所需的周数的水平代码.
即,这将给予所需的行数

CONNECT BY LEVEL < (DATE2 - DATE1) / 7

值得注意的是,DATE 2-DATE 1代码之所以有效,是因为Oracle喜欢以天为单位来考虑事情。例如,Sysdate - 1只是昨天。Sysdate + 1只是明天。
然后加上+1,因为在少于一周的情况下,您可能希望返回1行
然后这样做

SELECT DATE'2023-01-24' + (LEVEL-1) * 7
FROM DUAL
CONNECT BY LEVEL < ((SYSDATE - DATE'2023-01-24') / 7) + 1

相关问题