2013-01-01 100 views
1

我正在嘗試編寫一個識別任何日期格式並將其轉換爲單日期時間格式的plsql存儲過程'mm/dd/yyyy hh:mi:ss'。我該怎麼做。我嘗試使用案例陳述,但有這麼多的日期組合,它不可能爲所有人編寫案例陳述。 例如:27-Oct-1967,October 27 1967 11:15:45,1967-OCT-27等 如何將所有這些轉換爲單一格式。 謝謝。在PLSQL中識別日期格式

+2

如果你仔細想想,你會發現你根本無法。如果你把'2013/02/01'作爲輸入,會怎樣?那是1月2日還是2月1日? – Mat

回答

0

也許這可以幫助你:

CREATE TABLE temp_date 
AS 
SELECT '1967-OCT-27' some_date 
FROM dual 
UNION 
SELECT '27-Oct-1967' FROM dual 
UNION 
SELECT 'October 27 1967 11:15:45' FROM dual 
/

Declare 
    CURSOR i_cur IS 
    Select some_date 
    From temp_date; 
    -- 
    v_date1 Varchar2(30); 
    v_date2 Varchar2(30); 
    v_date3 Varchar2(30); 
    v_char Varchar2(30); 
    v_cnt Number:= 0; 
Begin 
    For i_rec IN i_cur 
    Loop 
    v_cnt:= v_cnt + 1; 
    Begin 
     v_date1:= to_char(to_date(i_rec.some_date), 'MM/DD/YYYY hh24:mi:ss'); 
     dbms_output.put_line(v_cnt||'.'||chr(9)||v_date1); 
     EXCEPTION 
     When Others Then 
      Begin 
      v_date2:= to_char(to_date(i_rec.some_date, 'MM/DD/YYYY hh24:mi:ss'), 'MM/DD/YYYY hh24:mi:ss'); 
      dbms_output.put_line(v_cnt||'.'||chr(9)||v_date2); 
      EXCEPTION 
       When Others Then 
       Begin 
       v_date3:= to_char(to_date(i_rec.some_date, 'YYYY-MON-DD'), 'MM/DD/YYYY hh24:mi:ss'); 
       dbms_output.put_line(v_cnt||'.'||chr(9)||v_date3); 
       EXCEPTION 
        When Others Then 
        -- Insert into Exceptions table (or any temp table) then convert... -- 
        v_char:= i_rec.some_date; 
        dbms_output.put_line(v_cnt||'. '||chr(9)||i_rec.some_date||' : '||v_char); 
       End; 
      End; 
    End; 
    End Loop; 
End; 
/

1. 10/27/1967 00:00:00 
2. 10/27/1967 00:00:00 
3. 10/27/1967 11:15:45 
+0

不客氣!總是樂於幫助! – Art

1

簡單to_char()會做,

select to_char(yourDateField,'mm/dd/yyyy hh:mi:ss') from dual; 
0

的將是格式化日期到您需要的格式,最希望的方式。然後做任何你需要的計算。

否則,你將不得不寫很大數量的select case s來定義格式。並不是說它沒有意義,因爲日期可以有很多不同的格式......如提到Mat。而且Date是一個可以被你的system影響的組件。使用給你可能甚至不知道如果此輸入是作爲一個字符串或實際日期To_Date()

轉換日期輸入到所需的格式:

你可以試試下面。所以你可能需要一些驗證,以確保它是一個適當的日期。

SELECT TO_DATE(mydate,'mm/dd/yyyy hh:mi:ss') FROM Dual; 
+0

感謝bonCodigo! – Orion