Oracle時間格式轉換異常處理函數

來源:互聯網
上載者:User

 

create or replace function F_FORMAT_DATE(v_date varchar2,format varchar)/*時間格式處理格式*/return dateas       v_endDate date;       v_rn varchar2(2);       V_LAST_DATE VARCHAR2(10);       Y VARCHAR2(4);       M VARCHAR2(4);       D VARCHAR2(4);       H VARCHAR2(4);       MI VARCHAR2(2);       S VARCHAR2(2);       M_count number;       str_date varchar2(20);  begin         str_date:=v_date;       SELECT TO_CHAR(str_date) INTO v_endDate FROM DUAL;       RETURN v_endDate;       EXCEPTION            WHEN OTHERS THEN         begin          IF  v_date IS NULL THEN             RETURN '';         END IF;         IF LENGTH(TRIM(v_date))<4 THEN             RETURN '';         END IF;         IF LENGTH(str_date)<14 THEN            str_date:=rpad(trim(v_date),14,'0');          ELSIF  LENGTH(str_date)>14 THEN            str_date:=substr(str_date,1,14);         END IF;          Y:=SUBSTR(str_date,1,4);         M:=SUBSTR(str_date,5,2);         D:=SUBSTR(str_date,7,2);         H:=SUBSTR(str_date,9,2);         MI:=SUBSTR(str_date,11,2);         S:=SUBSTR(str_date,13,2);         SELECT  lengthb(m) into M_COUNT  FROM DUAL;         IF M_COUNT>2 THEN              select to_date(str_date) into v_endDate from dual;            return v_endDate;         END IF;         --擷取當年是否潤年         select decode(to_char(last_day(trunc(to_date(substr(str_date,1,4)||'0101','yyyy-mm-dd'),'y')+31),'dd'),'29','rn','pn') into v_rn from dual;                IF TO_NUMBER(M)>12 THEN           M:='12';        ELSIF TO_NUMBER(M)<1 THEN           M:='01';        END IF;        IF TO_NUMBER(D)<1 THEN           D:='01';                 ELSIF TO_NUMBER(D)>28 THEN           --擷取當月的最後一天           SELECT TO_CHAR(last_day(to_date(Y||M||'01','yyyy-mm-dd')),'YYYYMMDD') INTO V_LAST_DATE FROM DUAL;           IF TO_NUMBER(SUBSTR(V_LAST_DATE,7,2))<TO_NUMBER(D) THEN              D:=SUBSTR(V_LAST_DATE,7,2);               END IF;                                                                        END IF;        IF TO_NUMBER(H)>23 THEN           H:='23';        ELSIF TO_NUMBER(H)<1 THEN           H:='01';        END IF;        IF TO_NUMBER(MI)>59 THEN           H:='59';        ELSIF TO_NUMBER(MI)<0 THEN           MI:='00';        END IF;        IF TO_NUMBER(S)>59 THEN           S:='59';        ELSIF TO_NUMBER(S)<0 THEN           S:='00';        END IF;        str_date:=Y||M||D||H||MI||S;        --dbms_output.put_line(str_date);        select  to_date(str_date,'YYYYMMDDHH24MISS') into v_endDate from dual;              return v_endDate;         EXCEPTION           WHEN OTHERS           THEN              return '';        end;end;

例如:to_date(XXX,‘yyyy-mm-dd’)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.