1、代码如下-- Created on 2020/10/28 by EDZ declare -- Local variables here i integer; START_TIME DATE:TO_DATE( 2020-08-01 00:00:00, yyyy-mm-dd hh24:mi:ss); END_TIME DATE:TO_DATE( 2020-10-01 00:00:00, yyyy-mm-dd hh24:mi:ss); START_TIME_STR VARCHAR2(20); END_TIME_STR VARCHAR2(20); begin -- Test statements here while START_TIME END_TIME loop START_TIME_STR :to_char(START_TIME,yyyy-mm-dd)|| 00:00:00; END_TIME_STR : to_char(START_TIME,yyyy-mm-dd)|| 23:59:59; DBMS_OUTPUT.PUT_LINE(START_TIME_STR|| ||END_TIME_STR); --DBMS_OUTPUT.PUT_LINE(to_date(START_TIME_STR,yyyy-mm-dd hh24:mi:ss)|| ||to_date(END_TIME_STR,yyyy-mm-dd hh24:mi:ss)); START_TIME: START_TIME 1; end loop; end;执行结果如下图所示2、通过当前月获得下一个月的日期ADD_MONTHS(TO_DATE(V_MAX_MONTH,yyyymm), 1)3、当前日期的年份第一天和最后一天1第一天select trunc(sysdate,y) FROM DUAL; select trunc(sysdate,yy) FROM DUAL; select trunc(sysdate,yyy) FROM DUAL; select trunc(sysdate,yyyy) FROM DUAL;2最后一天select last_day(add_months(trunc(SYSDATE,y),11)) from dual4、当前日期的月份第一天和最后一天1第一天select trunc(sysdate,MM) from dual;返回的是当前月的第一天的00:00:002最后天select last_day(sysdate) from dual;返回当前月的最后一天的00:00:005、得到当前月的第一天凌晨和最后一天的23:59:59秒-- Created on 2020/12/8 by EDZ declare -- Local variables here i integer; V_S_DATE DATE; START_DATE DATE; END_DATE DATE; begin -- Test statements here V_S_DATE:TO_DATE(202001,yyyymm); select trunc(V_S_DATE,MM) INTO START_DATE from dual; DBMS_OUTPUT.PUT_LINE(TO_CHAR(START_DATE,YYYY-MM-DD HH24:MI:SS)); select last_day(V_S_DATE) INTO END_DATE from dual; DBMS_OUTPUT.PUT_LINE(TO_CHAR(END_DATE,YYYY-MM-DD)|| 23:59:59); end;如下图所示5、将字符串27-11月-20转换成date类型如select to_char(cast(cast(27-11月-20 as timestamp) as date),yyyy-mm-dd hh24:mi:ss) dateStr from dual;输出结果如下图所示6、按月循环代码如下DECLARE START_TIME DATE : TO_DATE(2025-01-02 00:00:00, yyyy-mm-dd hh24:mi:ss); END_TIME DATE : TO_DATE(2026-03-02 00:00:00, yyyy-mm-dd hh24:mi:ss); CUR_START DATE; CUR_END DATE; MONTH_LAST_DAY DATE; START_TIME_STR VARCHAR2(20); END_TIME_STR VARCHAR2(20); BEGIN CUR_START : START_TIME; WHILE CUR_START END_TIME LOOP -- ★ 核心取当前所在自然月的最后一天时间部分为 00:00:00 MONTH_LAST_DAY : TRUNC(LAST_DAY(CUR_START)); -- 当前周期结束 当月月末 23:59:59 CUR_END : MONTH_LAST_DAY INTERVAL 1 DAY - INTERVAL 1 SECOND; -- 边界保护如果月末超过了总结束时间则截断到 END_TIME IF CUR_END END_TIME THEN CUR_END : END_TIME; END IF; START_TIME_STR : TO_CHAR(CUR_START, yyyy-mm-dd hh24:mi:ss); END_TIME_STR : TO_CHAR(CUR_END, yyyy-mm-dd hh24:mi:ss); DBMS_OUTPUT.PUT_LINE(START_TIME_STR || || END_TIME_STR); -- ★ 下一周期起点 下月1日 00:00:00自然月切分不是 ADD_MONTHS CUR_START : TRUNC(MONTH_LAST_DAY) INTERVAL 1 DAY; END LOOP; END;如下图所示