1. ホーム
  2. sql

[解決済み] ORA-01821: ISO 8601 のローカルタイム付き日付のフォーマットが認識されないエラー

2022-02-05 08:37:44

質問

Javaコードのパラメータ値に基づいて、SQLで日付を変換しようとしています。しかし、以下のクエリを実行すると、エラーが発生します。このクエリを修正するために私を助けるためにあなたを要求する。

 SELECT TO_DATE ('2015-08-26T05:46:30.488+0100',
 'YYYY-MM-DD"T"hh24:mi:ss.sTZH:TZM')
  FROM DUAL
  *
Error at line 2
ORA-01821: date format not recognized

日付と時刻のフォーマット情報。

http://www.w3.org/TR/NOTE-datetime

解決方法は?

2つの問題があります。 TO_DATE はタイムゾーンの要素や秒の端数を認識しないので、タイムゾーンを含むタイムスタンプに変換する必要があります。 .s は分数秒を表現する方法ではないので、とにかく .ff . 有効な書式モデル は、ドキュメントに記載されている .

それらをまとめると、こうなります。

SELECT TO_TIMESTAMP_TZ ('2015-08-26T05:46:30.488+0100',
 'YYYY-MM-DD"T"hh24:mi:ss.ffTZHTZM')
FROM DUAL;

TO_TIMESTAMP_TZ('2015-08-26T05:46:30.488+0100','YYYY-MM-DD"T"HH24:MI:SS.FFTZHTZ
-------------------------------------------------------------------------------
26-AUG-15 05.46.30.488000000 +01:00                                             

もし本当に日付にしたいのであれば、タイムゾーン情報をどうするか決める必要があります。ローカルタイムと仮定するか(基本的に無視する)、UTCや他のタイムゾーンに変換するかです。しかし、タイムゾーンを含むタイムスタンプとして保持したい場合もあります。