2017-10-13 9 views
0

データ型が「TIMESTAMP(6)WITH TIME ZONE」のcolumn_name1を持つoracle 12cにtable_nameがあります。私はSQL Developerを使用しています。AMが使用されていますが、AM/A.M。またはPM/P.M。必須 "エラーが発生しました

SQL Developerを使用してこのcolumn_name1から何かを選択すると、次のような日付が表示されます。19-SEP-17 03.19.55.000000000 PM +00:00はUTCです。

私は自分のSQLで同じフォーマットを使用し、where句で文字列として渡すとうまくいきます。例:

select column_name1 from table_name where column_name1 = '19-SEP-17 03.19.55.000000000 PM +00:00'; 

しかし、このような状況では文字列を日付に変換することをお勧めします。 TO_TIMESTAMPを使用してこれを実行しようとしているときに、SQLに追加する正しい形式を見つけられません。

select column_name1 from table_name where column_name1 = TO_TIMESTAMP('19-SEP-17 03.19.55.000000000 PM +00:00', 'DD-MON-YYYY HH:MI:SS.FF A.M. TZH:TZM'); 

およびAS/PM AMがすでに存在しているにもかかわらず、私はまだエラーを取得:私が試してみました何

である私も '=アメリカNLS_DATE_LANGUAGE' を追加しようとしている AM/A.M. or PM/P.M. required

それでも同じエラーが発生します。

私はここで何が欠けていますか?この文字列をTIMESTAMPに変換できるように、TO_TIMESTAMP形式を変更するにはどうすればよいですか?

答えて

3

列はタイムスタンプWITH TIME ZONEであり、入力文字列とフォーマットモデルは両方ともタイムスタンプWITH TIME ZONEのため、実際にTO_TIMESTAMP_TZを使用していますか? (TO_TIMESTAMPを使用していた場合、「日付フォーマットが認識されません」というような別のエラーが発生します。タイムゾーンなしでタイムゾーンのフォーマットモデルにタイムゾーンの形式要素を入れることはできません。

その場合は、PM(ドットなし)を入力文字列に渡しますが、フォーマットモデルにはA.M.(ドット付き)が付いているために発生します。両方の場所で同じフォーマットを使用してください。ドットを使用するか、使用しないかは同じですが、一貫性があります。

オラクル社では、不一致の区切り文字には戸惑うことがありませんが、この場合はありません。もしあなたが好きであれば、オラクルがどのような置換を試みるかを正確に調べるためにドキュメントを捜すことができます。それは学問的な運動のように聞こえる。入力文字列と書式モデルの間で一貫性を保つだけで問題はありません。

+0

ご連絡ありがとうございます。ご迷惑をおかけします。ご了承ください。 Oracle SQL Developerのデフォルトのタイムスタンプ表示形式を変更し、それを 'YYYY-MM-DD HH24.MI.SSXFF'に変更し、タイムゾーンが' YYYY-MM-DD HH24.MI.SSXFF TZR'のタイムスタンプに対して変更しました。私はツール - >環境設定 - >データベース - > NLS – 300

+0

@ 300からやった。ほとんどの開発者は24時間形式を好んだ(混乱が少なく、このような厄介なルールの機会は少ない)。 AM/PMは、非技術的な "消費者"レポートに使用されます。 – mathguy

関連する問題