3

たまたま、オラクルの varchar2 列から日付を取得する必要がありますが、フォーマットに一貫性がありません。一部のフィールドには「2009.12.31」が含まれる場合があり、他のフィールドには「2009/12/32 00:00:00」が含まれる場合があります。通過する必要がないように、使用できる標準的な構造はありますか

begin
  to_date(date, mask1)
exception
  begin
    to_date(date,mask2)
  exception
    ..
  end
end

正しいマスクを決定するためのブロックまたは以前の日付文字列分析? みたいなto_date(date, mask1,mask2,..)

4

2 に答える 2

4

いいえ。ただし、一部の Oracle 日付形式は違いを「許容」しています。

SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;

TO_DATE('20
-----------
31-DEC-2009

そのため、処理する必要があるケースの量を減らすことができます。このような日付を処理する必要があるコード内のすべての場所から呼び出すことができるように、考えていた行に沿って関数を作成することをお勧めします。

于 2009-12-18T14:04:41.973 に答える
1

サポートしたいすべての可能な形式を列挙する必要があります。一部はあいまいであるため(たとえば、「10-11-2009」は11月10日または10月11日ですか?)、コードはどちらか一方を優先する必要があります。

Tonyが言ったように、一部の形式は、主に区切り文字と欠落ビットの解析に関して、さまざまな入力を受け入れます(たとえば、「DD-MON-YYYY HH24:MI:SS」は「31-DEC-200910:30」と一致します:00'、' 31 / deC / 2009 10:30'、' 31 dec 2009')。

これらの単純化とは別に、一連のBEGIN(format1)EXCEPTION WHEN OTHERS THEN BEGIN(format2)EXCEPTION WHEN OTHERS THENBEGIN...が必要になります。

于 2009-12-19T13:02:53.820 に答える