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