我有一个数据,其中给定两个日期,它创建了一个范围内的开始日期和结束日期与7天的差距使用下面的查询。
WITH Ranges AS (
SELECT
TO_DATE('2023-10-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS') START_DATE,
TO_DATE('2023-11-13 00:00:00', 'YYYY-MM-DD HH24:MI:SS') END_DATE
FROM
DUAL
)
SELECT
GREATEST(START_DATE, TRUNC(START_DATE + 7 *(LEVEL - 1))) WEEK_FIRST_DATE,
LEAST(END_DATE, TRUNC(START_DATE + 7 *(LEVEL - 1)) + 7 - INTERVAL '1' SECOND) WEEK_LAST_DATE,
LEVEL SL_NO
FROM
Ranges
CONNECT BY
START_DATE + 7 * ( LEVEL - 1 ) <= END_DATE
字符串
查询输出:
的数据
现在的要求是进一步划分和创建范围,如果月份的结束日期福尔斯落在这个范围内,然后从下一个日期计算接下来的7天,等等。
16-OCT-23 00:00:00 22-OCT-23 23:59:59 1
23-OCT-23 00:00:00 29-OCT-23 23:59:59 2
30-OCT-23 00:00:00 31-OCT-23 23:59:59 3 ---- as month end date falling in the range, so last date changed.
01-NOV-23 00:00:00 07-NOV-23 23:59:59 4 --- Calculate 7 days gap from next date onwards till we reach end date in the query
08-NOV-23 00:00:00 13-NOV-23 23:59:59 5
型
2条答案
按热度按时间bprjcwpo1#
你可以使用递归查询和
LAST_DAY
函数:字符串
其输出:
| 第一周日期|星期_最后_日期|SL_NO|
| --|--|--|
| 2023-10-16 00:00:00| 2023-10-22 23:59:59| 1 |
| 2023-10-23 00:00:00| 2023-10-29 23:59:59| 2 |
| 2023年10月30日00:00:00| 2023-10-31 23:59:59| 3 |
| 2023年11月1日00:00:00| 2023-11-07 23:59:59| 4 |
| 2023年11月8日00:00:00| 2023年11月13日00:00:00| 5 |
fiddle
dz6r00yl2#
字符串