当月的第一天是单月第一周的开始时间,周的结束时间是星期天,周不能跨月即当月的最后一天就是当月周的最后一天
WITH months AS ( SELECT ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), LEVEL - 1) AS month_start, LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), LEVEL - 1)) AS month_end FROM dual CONNECT BY LEVEL <= 12 ), weeks (month_start, month_end, week_start, week_end, week_number) AS ( SELECT m.month_start, m.month_end, m.month_start AS week_start, LEAST(m.month_start + 7 - TO_CHAR(m.month_start, 'D') + 1, m.month_end) AS week_end, ---这里参数改成6就是西方的周日开始,改成7就是中国周一开始 1 AS week_number FROM months m UNION ALL SELECT w.month_start, w.month_end, w.week_end + 1 AS week_start, LEAST(w.week_end + 7, w.month_end) AS week_end, w.week_number + 1 FROM weeks w WHERE w.week_end < w.month_end ) SELECT TO_CHAR(month_start, 'YYYY-MM') AS "Month", week_number AS "Week Number", MIN(week_start) AS "Start Date", MAX(week_end) AS "End Date" FROM weeks GROUP BY month_start, week_number ORDER BY month_start, week_number;
本文来自博客园,作者:Iven_lin,转载请注明原文链接:https://www.cnblogs.com/ivenlin/p/18758511
浙公网安备 33010602011771号