Oracleで複数の可能なマスクを使用して、これまでに変換します

StackOverflow https://stackoverflow.com/questions/1928317

  •  20-09-2019
  •  | 
  •  

質問

Oracleの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,..) ?

役に立ちましたか?

解決

いいえ、しかし、いくつかのOracle Date形式は違いを「寛容」にしています

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

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

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

他のヒント

サポートしたいすべての可能な形式を列挙する必要があります - 曖昧であることを覚えておいてください(例:「10-11-2009」11月10日または10月11日ですか?)。

トニーが言ったように、一部のフォーマットは、主にセパレーター文字と欠落しているビットの解析に関して、さまざまな入力を受け入れます(例: 'dd-mon-yyy hh24:mi:ss'は'31-dec-2009 10:30 :00 '、'31/Dec/2009 10:30'、'31 Dec 2009 ')。

これらの単純化とは別に、他の人がbegin(format2)例外のシリーズ(format1)例外が必要になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top