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

來源:互聯網
上載者:User

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

  1. create or replace function F_FORMAT_DATE(v_date varchar2,format varchar)  
  2. /*  
  3. 時間格式處理格式  
  4. */  
  5. return date  
  6. as  
  7.        v_endDate date;  
  8.        v_rn varchar2(2);  
  9.        V_LAST_DATE VARCHAR2(10);  
  10.        Y VARCHAR2(4);  
  11.        M VARCHAR2(4);  
  12.        D VARCHAR2(4);  
  13.        H VARCHAR2(4);  
  14.        MI VARCHAR2(2);  
  15.        S VARCHAR2(2);  
  16.        M_count number;  
  17.        str_date varchar2(20);    
  18. begin    
  19.        str_date:=v_date;  
  20.        SELECT TO_CHAR(str_date) INTO v_endDate FROM DUAL;  
  21.        RETURN v_endDate;  
  22.        EXCEPTION       
  23.        WHEN OTHERS THEN  
  24.          begin   
  25.          IF  v_date IS NULL THEN  
  26.              RETURN '';  
  27.          END IF;  
  28.          IF LENGTH(TRIM(v_date))<4 THEN  
  29.              RETURN '';  
  30.          END IF;  
  31.          IF LENGTH(str_date)<14 THEN  
  32.             str_date:=rpad(trim(v_date),14,'0');   
  33.          ELSIF  LENGTH(str_date)>14 THEN  
  34.             str_date:=substr(str_date,1,14);  
  35.          END IF;   
  36.          Y:=SUBSTR(str_date,1,4);  
  37.          M:=SUBSTR(str_date,5,2);  
  38.          D:=SUBSTR(str_date,7,2);  
  39.          H:=SUBSTR(str_date,9,2);  
  40.          MI:=SUBSTR(str_date,11,2);  
  41.          S:=SUBSTR(str_date,13,2);  
  42.          SELECT  lengthb(m) into M_COUNT  FROM DUAL;  
  43.          IF M_COUNT>2 THEN    
  44.             select to_date(str_date) into v_endDate from dual;  
  45.             return v_endDate;  
  46.          END IF;  
  47.          --擷取當年是否潤年   
  48.          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;  
  49.           
  50.         IF TO_NUMBER(M)>12 THEN  
  51.            M:='12';  
  52.         ELSIF TO_NUMBER(M)<1 THEN  
  53.            M:='01';  
  54.         END IF;  
  55.         IF TO_NUMBER(D)<1 THEN  
  56.            D:='01';           
  57.         ELSIF TO_NUMBER(D)>28 THEN  
  58.            --擷取當月的最後一天   
  59.            SELECT TO_CHAR(last_day(to_date(Y||M||'01','yyyy-mm-dd')),'YYYYMMDD') INTO V_LAST_DATE FROM DUAL;  
  60.            IF TO_NUMBER(SUBSTR(V_LAST_DATE,7,2))<TO_NUMBER(D) THEN  
  61.               D:=SUBSTR(V_LAST_DATE,7,2);      
  62.            END IF;                                                                  
  63.         END IF;  
  64.         IF TO_NUMBER(H)>23 THEN  
  65.            H:='23';  
  66.         ELSIF TO_NUMBER(H)<1 THEN  
  67.            H:='01';  
  68.         END IF;  
  69.         IF TO_NUMBER(MI)>59 THEN  
  70.            H:='59';  
  71.         ELSIF TO_NUMBER(MI)<0 THEN  
  72.            MI:='00';  
  73.         END IF;  
  74.         IF TO_NUMBER(S)>59 THEN  
  75.            S:='59';  
  76.         ELSIF TO_NUMBER(S)<0 THEN  
  77.            S:='00';  
  78.         END IF;  
  79.         str_date:=Y||M||D||H||MI||S;  
  80.         --dbms_output.put_line(str_date);   
  81.         select  to_date(str_date,'YYYYMMDDHH24MISS') into v_endDate from dual;        
  82.         return v_endDate;   
  83.         EXCEPTION  
  84.            WHEN OTHERS  
  85.            THEN  
  86.               return '';  
  87.         end;  
  88. 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.