2017-08-20 21 views
0

jdbcドライバを使用してタイムスタンプ列の値を取得しようとしています。私は、タイムスタンプ値を必要と私は私の選択statemntで次のクエリを使用している場合、それはOracleのto_timestampでエラーが発生する

OTA-01821-日付を与え、代わりにto_char関数の、しかし

to_char(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') update_date 

:次のクエリでは、魔法のように動作しますフォーマットが認識されない

エラーです。誰か助けてもらえますか?

to_timestamp(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') update_date 
+3

「update_date」列のデータ型は?それが 'タイムスタンプ'(それはそうであるべきである)であれば、それを全く変換する必要はありません。 –

+0

To_timestamp(To_char(update_date、 'Format')、 'Format')を試してください。 – sagi

答えて

2

エラーの直接の原因は、プレーン、タイムスタンプには有効ではありません書式マスクのTZRの一部です。

to_timestamp_tz(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') 

やタイムゾーンを省略:あなたはタイムゾーンwith a different functionとタイムスタンプに変換することができどちらか

to_timestamp(update_date,'YYYY-MM-DD HH24:MI:SS.FF9') 

しかしuodate_dateはすでに([ローカル]タイムゾーンを持つ)のタイムスタンプであるとして、文字列をyour session's NLS_TIMESTAMP_TZ_FORMAT settingを使用して暗黙的に変換してから、その文字列を明示的に(タイムゾーンの有無にかかわらず)タイムスタンプに変換します。

これは無意味ですが、使用している明示的なフォーマットとNLS設定が一致しない場合は、別のエラーまたは不正確な結果が表示されます。

Javaのタイムスタンプ値を使用する場合は、変換を行わないでください。元のupdate_date列を選択し、JDBC getTimestamp()を使用して取得してください。

+0

ありがとう!私のタイムスタンプの列は、17-07-14 08:40:47.000000000 UTCの形式です。これには何を使用すべきですか? –

+0

列のデータ型がタイムスタンプ(おそらくローカル)のタイムゾーンである場合、それは固有の形式を持ちません。あなたのクライアントはNLS設定を使ってそのように表示しています。あなたはそれをまったく変換する必要はありません。 –

関連する問題