0

私はOracleを初めて使用し、誰かがこのシナリオを明確にしてくれることを願っています。

一連の日付を返す非常に大きなクエリを作成しました(Oracle10g)。

SQL Developerでは、これらの日付はDD-MON-YY形式で表示されます(例:「12-MAY-12」)。SQL Developerのフィールドのデータ型は、それが日付型であることを示しており、「単純」ラジオボタンがチェックされています。SQL Developerでこのクエリを実行すると、次のような日付が表示されます。

2012年5月11日

このクエリは、C#Webサービスの一部であるアセンブリで使用します。QEサーバーがホストされているオフショアチームの誰かが、フィールドの値がISTオフセットに変換されていることに気づきました(DataSetにGetXmlを使用してXMLに変換されています)。問題は、SQL Developerで出力を確認できないため、デバッガーで出力を検査するまで、オフセットが存在することすら知りませんでした。それはこのようにやってくる:

2012-05-11T06:09:15 + 05:30

使用される固有の日付変換関数はなく、日付を引き出​​すフィールドの名前だけが使用されます。

クエリの実行時にオフセット(日付の時間部分を保持する必要があります)が考慮されないようにクエリを変更するにはどうすればよいですか?質問は複雑に聞こえますが、最終的には、海外の別のデータベースに書き込まれるデータに間違ったオフセットが含まれているため、1日ずれた日付に変換されます。

基本的には時間は必要ですが、オフセットは必要ありません。

4

1 に答える 1

1

OracleDATEには日と時間のコンポーネントがありますが、タイムゾーンはありません。ATIMESTAMP WITH [LOCAL] TIME ZONEにはタイムゾーンがあり、1秒未満の精度もあります。

DATEいくつかの異なる方法で、データを文字列に変換して表示する方法を変更できます。まず、明示的に使用するTO_CHAR

SELECT to_char( <<your_date_column>>, 'YYYY-MM-DD HH24:MI:SS' )
  FROM your_table

次に、セッションのを変更しNLS_DATE_FORMATて、セッションが常に特定の形式でデータを表示するようにすることができます

ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT <<your_date_column>>
  FROM your_table

第3に、SQL Developerでは、DATEデータの表示に使用する文字列形式を変更できます。に行くとTools | Preferences | Database | NLSDate Formatフィールドがあります。DD-MON-RRこれをからに変更するYYYY-MM-DD HH24:MI:SSと、デフォルトで曜日と時刻が表示されます。

于 2012-05-14T18:07:43.640 に答える