在PLSQL中标识日期格式

在PLSQL中标识日期格式,sql,plsql,Sql,Plsql,我正在尝试编写一个plsql存储过程,它标识任何日期格式并将其转换为单一日期时间格式'mm/dd/yyyy hh:mi:ss'。我该怎么做呢。我试着使用case statment,但是有太多的日期组合,所以不可能为所有的日期组合编写case statment。 例如:1967年10月27日,1967年10月27日11:15:45,1967年10月27日,等等。 如何将所有这些转换为单一格式。 谢谢。简单地到_char()就可以了 select to_char(yourDateField,'mm/

我正在尝试编写一个plsql存储过程,它标识任何日期格式并将其转换为单一日期时间格式
'mm/dd/yyyy hh:mi:ss'
。我该怎么做呢。我试着使用case statment,但是有太多的日期组合,所以不可能为所有的日期组合编写case statment。 例如:
1967年10月27日
1967年10月27日11:15:45
1967年10月27日
,等等。 如何将所有这些转换为单一格式。 谢谢。

简单地
到_char()
就可以了

select to_char(yourDateField,'mm/dd/yyyy hh:mi:ss') from dual;
只需将
转换为\u char()
即可

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

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

否则,您将不得不编写大量的
select case
s来定义格式。更不用说它毫无意义,因为日期可以有很多不同的格式……正如
Mat
所提到的。此外,
Date
是一个受
系统影响的组件

您可以尝试以下方法:

使用
To_date()
将日期输入转换为所需格式,因为您可能甚至不知道此输入是字符串还是真实日期。因此,您可能需要一些验证,以确保这是一个正确的日期

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

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

否则,您将不得不编写大量的
select case
s来定义格式。更不用说它毫无意义,因为日期可以有很多不同的格式……正如
Mat
所提到的。此外,
Date
是一个受
系统影响的组件

您可以尝试以下方法:

使用
To_date()
将日期输入转换为所需格式,因为您可能甚至不知道此输入是字符串还是真实日期。因此,您可能需要一些验证,以确保这是一个正确的日期

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

也许这可以帮助你:

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

也许这可以帮助你:

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

如果你仔细想想,你会发现你根本无法做到。如果您将
2013/02/01
作为输入,该怎么办。那是1月2日还是2月1日?如果你仔细想想,你会发现你根本无法做到。如果您将
2013/02/01
作为输入,该怎么办。那是一月二号还是二月一号?