识别PLSQL中的日期格式

时间:2013-01-01 10:59:46

标签: sql plsql

我正在尝试编写一个标识任何日期格式的plsql存储过程,并将其转换为单个日期时间格式'mm/dd/yyyy hh:mi:ss'。我该怎么做。我尝试使用案例陈述但是有太多的日期组合,因此无法为所有这些组合写出案例陈述。 例如:27-Oct-1967October 27 1967 11:15:451967-OCT-27等。 如何将所有这些转换为单一格式。 谢谢。

3 个答案:

答案 0 :(得分:1)

只需to_char()即可,

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

答案 1 :(得分:0)

最理想的方法是将日期格式化为您需要的格式。然后做你需要的任何计算。

否则你将不得不写出大量的select case来定义格式。并不是说它没有意义,因为日期可以有许多不同的格式......正如Mat提到的那样。此外,Date是一个可能受system影响的组件。

您可以尝试以下方法:

使用To_Date()将日期输入转换为所需格式,因为您可能甚至不知道此输入是作为字符串还是实际日期。所以你可能需要一些验证来确保它是一个合适的日期。

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

答案 2 :(得分: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