1

任意の日付形式を識別し、それを単一の日時形式に変換する plsql ストアド プロシージャを作成しようとしています'mm/dd/yyyy hh:mi:ss'。どうすればいいのですか。ケースステートメントを使用してみましたが、日付の組み合わせが多すぎて、すべてのケースステートメントを記述することはできません。例: 27-Oct-1967October 27 1967 11:15:451967-OCT-27など。これらすべてを単一の形式に変換するにはどうすればよいですか。ありがとうございました。

4

3 に答える 3

1

単純to_char()に、

select to_char(yourDateField,'mm/dd/yyyy hh:mi:ss') from dual;
于 2013-01-01T11:02:21.687 に答える
0

最も望ましい方法は、日付を必要な形式にフォーマットすることです。次に、必要な計算を行います。

select caseそうしないと、フォーマットを定義するために途方もなく多数のを記述する必要があります。日付はさまざまな形式で提供される可能性があるため、意味がないことは言うまでもありませんMat。さらにDate、あなたの影響を受ける可能性のあるコンポーネントがありますsystem

次のことを試すことができます。

To_Date()この入力が文字列であるか実際の日付であるかさえわからない場合は、を使用して日付入力を目的の形式に変換します。したがって、適切な日付であることを確認するために、いくつかの検証が必要になる場合があります。

SELECT TO_DATE(mydate,'mm/dd/yyyy hh:mi:ss') FROM Dual;
于 2013-01-01T11:20:48.250 に答える
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
于 2013-01-02T15:27:48.877 に答える