1. 程式人生 > >oracle資料獲取當前自然周,當前周的起始和結束時間

oracle資料獲取當前自然周,當前周的起始和結束時間

select to_char(sysdate,'iw')   from dual; --本週是第幾個自然周
  select to_char(sysdate,'yyyy') into v_sbzq_nf from dual;  -- 當前年份
  SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'),'IW'),'yyyy-MM-dd')  FROM DUAL;--本週的起始時間(本週週一日期)
  SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'YYYY-MM-DD'),'IW') + 6,'yyyy-MM-dd') FROM DUAL;--本週的結束時間(本週週日日期)


下面是使用儲存過程向資料庫中插入一條資料

資料格式 :上報週期                起始時間     結束時間

                     xxxx年第xx周         xx.xx                xx.xx

儲存過程如下:

create or replace procedure PRC_T_SJSB_ZYGYPJG is
 v_sbzq_zs varchar2(20);--上報週期週數
 v_sbzq_nf varchar2(10); --上報週期年份
 v_start varchar2(10);  --起始月份
 v_end varchar2(10);  --結束月份
 v_sbzq varchar2(20); --上報週期
begin
  select to_char(sysdate,'iw') into  v_sbzq_zs from dual; --本週是第幾個自然周
  select to_char(sysdate,'yyyy') into v_sbzq_nf from dual;
  SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'),'IW'),'yyyy-MM-dd') into v_start  FROM DUAL;--本週的起始時間(本週週一日期)
  SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'YYYY-MM-DD'),'IW') + 6,'yyyy-MM-dd') into v_end  FROM DUAL;--本週的結束時間(本週週日日期)
   v_start:=substr(v_start,6);
   v_end :=substr(v_end,6);

   v_start :=replace(v_start,'/','.');
   v_start :=replace(v_start,'-','.');
    v_end :=replace(v_end, '/','.');
   v_end :=replace(v_end, '-','.');
   v_sbzq :=v_sbzq_nf||'年第'||v_sbzq_zs||'周';
  insert into T_SJSB_ZYGYPJG (sbzq,sbzt,startdate,enddate) values(v_sbzq,'0',v_start,v_end);
  commit;

end PRC_T_SJSB_ZYGYPJG;