2013-01-01 53 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