SELECT
trunc(sysdate,'MM') + ROWNUM - 1 as WORK_DATE
FROM
DUAL
CONNECT BY ROWNUM <= last_day(sysdate) - trunc(sysdate,'MM') + 1;
这段 Oracle SQL 代码的目的是生成从当前月的第一天(trunc(sysdate,'MM')
)开始到当前月的最后一天(last_day(sysdate)
)之间的所有日期,包括首尾两天的日期。
-
trunc(sysdate,'MM')
:- 这会返回当前日期所在月份的第一天。例如,如果今天是 2023-10-23,那么
trunc(sysdate,'MM')
会返回 2023-10-01。
- 这会返回当前日期所在月份的第一天。例如,如果今天是 2023-10-23,那么
-
last_day(sysdate)
:- 这会返回当前日期所在月份的最后一天。例如,如果今天是 2023-10-23,那么
last_day(sysdate)
会返回 2023-10-31。
- 这会返回当前日期所在月份的最后一天。例如,如果今天是 2023-10-23,那么
-
last_day(sysdate) - trunc(sysdate,'MM') + 1
:- 这部分计算了从当前月的第一天到最后一天之间有多少天。例如,对于 2023-10 月,这将是 31 - 1 + 1 = 31。
-
CONNECT BY ROWNUM <= ...
:- 这是一个 Oracle 特定的构造,用于生成一个基于行号的虚拟表。在这里,它用于生成从 1 到
last_day(sysdate) - trunc(sysdate,'MM') + 1
的行号序列。
- 这是一个 Oracle 特定的构造,用于生成一个基于行号的虚拟表。在这里,它用于生成从 1 到